icu4c-58.2-fix_enumeration-1-1.patch 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. Submitted By: Pierre Labastie <pierre dot labastie at neuf dot fr>
  2. Date: 2016-11-15
  3. Initial Package Version: 58.1
  4. Upstream Status: Applied
  5. Origin: Upstream, rediffed so that patch -p1 works.
  6. Description: Fix a regression in 58.1, which made mozilla applications
  7. segfault. See ticket #8527
  8. diff -Naur icu.old/source/common/ulist.c icu.new/source/common/ulist.c
  9. --- icu.old/source/common/ulist.c 2016-06-15 20:58:17.000000000 +0200
  10. +++ /icu/source/common/ulist.c 2016-11-15 16:11:09.996596933 +0100
  11. @@ -29,7 +29,6 @@
  12. UListNode *tail;
  13. int32_t size;
  14. - int32_t currentIndex;
  15. };
  16. static void ulist_addFirstItem(UList *list, UListNode *newItem);
  17. @@ -51,7 +50,6 @@
  18. newList->head = NULL;
  19. newList->tail = NULL;
  20. newList->size = 0;
  21. - newList->currentIndex = -1;
  22. return newList;
  23. }
  24. @@ -80,8 +78,9 @@
  25. } else {
  26. p->next->previous = p->previous;
  27. }
  28. - list->curr = NULL;
  29. - list->currentIndex = 0;
  30. + if (p == list->curr) {
  31. + list->curr = p->next;
  32. + }
  33. --list->size;
  34. if (p->forceDelete) {
  35. uprv_free(p->data);
  36. @@ -150,7 +149,6 @@
  37. newItem->next = list->head;
  38. list->head->previous = newItem;
  39. list->head = newItem;
  40. - list->currentIndex++;
  41. }
  42. list->size++;
  43. @@ -193,7 +191,6 @@
  44. curr = list->curr;
  45. list->curr = curr->next;
  46. - list->currentIndex++;
  47. return curr->data;
  48. }
  49. @@ -209,7 +206,6 @@
  50. U_CAPI void U_EXPORT2 ulist_resetList(UList *list) {
  51. if (list != NULL) {
  52. list->curr = list->head;
  53. - list->currentIndex = 0;
  54. }
  55. }
  56. @@ -272,4 +268,3 @@
  57. U_CAPI UList * U_EXPORT2 ulist_getListFromEnum(UEnumeration *en) {
  58. return (UList *)(en->context);
  59. }
  60. -
  61. diff -Naur icu.old/source/i18n/ucol_res.cpp icu.new/source/i18n/ucol_res.cpp
  62. --- icu.old/source/i18n/ucol_res.cpp 2016-09-28 04:26:02.000000000 +0200
  63. +++ /icu/source/i18n/ucol_res.cpp 2016-11-15 16:11:10.000596933 +0100
  64. @@ -680,6 +680,7 @@
  65. return NULL;
  66. }
  67. memcpy(en, &defaultKeywordValues, sizeof(UEnumeration));
  68. + ulist_resetList(sink.values); // Initialize the iterator.
  69. en->context = sink.values;
  70. sink.values = NULL; // Avoid deletion in the sink destructor.
  71. return en;