Guest User

Untitled

a guest
Feb 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. diff -Naur ruby-1.8.6-p114/array.c ruby-1.8.6-p114.1/array.c
  2. --- ruby-1.8.6-p114/array.c 2007-09-07 03:46:40.000000000 -0400
  3. +++ ruby-1.8.6-p114.1/array.c 2008-07-18 09:43:28.000000000 -0400
  4. @@ -20,6 +20,7 @@
  5. static ID id_cmp;
  6.  
  7. #define ARY_DEFAULT_SIZE 16
  8. +#define ARY_MAX_SIZE (LONG_MAX / sizeof(VALUE))
  9.  
  10. void
  11. rb_mem_clear(mem, size)
  12. @@ -367,7 +368,7 @@
  13. new_capa = ARY_DEFAULT_SIZE;
  14. }
  15. new_capa += idx;
  16. - if (new_capa * (long)sizeof(VALUE) <= new_capa) {
  17. + if (new_capa < 0 || new_capa > LONG_MAX / sizeof(VALUE)) {
  18. rb_raise(rb_eArgError, "index too big");
  19. }
  20. REALLOC_N(RARRAY(ary)->ptr, VALUE, new_capa);
  21. @@ -976,6 +977,9 @@
  22.  
  23. if (beg >= RARRAY(ary)->len) {
  24. len = beg + rlen;
  25. + if (len < 0 || len > LONG_MAX / sizeof(VALUE)) {
  26. + rb_raise(rb_eIndexError, "index %ld too big", beg);
  27. + }
  28. if (len >= RARRAY(ary)->aux.capa) {
  29. REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
  30. RARRAY(ary)->aux.capa = len;
  31. @@ -2265,6 +2269,9 @@
  32. break;
  33. }
  34. rb_ary_modify(ary);
  35. + if (beg >= ARY_MAX_SIZE || len > ARY_MAX_SIZE - beg) {
  36. + rb_raise(rb_eArgError, "argument too big");
  37. + }
  38. end = beg + len;
  39. if (end < 0) {
  40. rb_raise(rb_eArgError, "argument too big");
  41. diff -Naur ruby-1.8.6-p114/string.c ruby-1.8.6-p114.1/string.c
  42. --- ruby-1.8.6-p114/string.c 2007-09-07 03:40:27.000000000 -0400
  43. +++ ruby-1.8.6-p114.1/string.c 2008-07-18 09:43:28.000000000 -0400
  44. @@ -458,10 +458,9 @@
  45. VALUE *argv;
  46.  
  47. if (TYPE(arg) == T_ARRAY) {
  48. - argv = ALLOCA_N(VALUE, RARRAY(arg)->len + 1);
  49. - argv[0] = str;
  50. - MEMCPY(argv+1, RARRAY(arg)->ptr, VALUE, RARRAY(arg)->len);
  51. - return rb_f_sprintf(RARRAY(arg)->len+1, argv);
  52. + argv = rb_ary_dup(arg);
  53. + rb_ary_unshift(argv, str);
  54. + return rb_f_sprintf(RARRAY(arg)->len+1, RARRAY(argv)->ptr);
  55. }
  56.  
  57. argv = ALLOCA_N(VALUE, 2);
  58. @@ -780,6 +779,9 @@
  59. capa = RSTRING(str)->aux.capa;
  60. }
  61. len = RSTRING(str)->len+RSTRING(str2)->len;
  62. + if (len < 0 || (capa+1) > LONG_MAX / 2) {
  63. + rb_raise(rb_eArgError, "string sizes too big");
  64. + }
  65. if (capa <= len) {
  66. while (len > capa) {
  67. capa = (capa + 1) * 2;
Add Comment
Please, Sign In to add comment