Просмотр исходного кода

structure: BStringTrie: fix integer overflow when casting size_t to int

ambrop7 13 лет назад
Родитель
Сommit
ab6d91a075
1 измененных файлов с 6 добавлено и 5 удалено
  1. 6 5
      structure/BStringTrie.h

+ 6 - 5
structure/BStringTrie.h

@@ -47,8 +47,8 @@ struct BStringTrie__node {
 
 typedef struct {
     struct BStringTrie__node *arr;
-    size_t count;
-    size_t capacity;
+    int count;
+    int capacity;
 } BStringTrie;
 
 static int BStringTrie_Init (BStringTrie *o) WARN_UNUSED;
@@ -62,13 +62,14 @@ static int BStringTrie__new_node (BStringTrie *o, int *out_nodeidx)
 {
     ASSERT(o->count <= o->capacity)
     ASSERT(o->capacity > 0)
+    ASSERT(o->count >= 0)
     ASSERT(out_nodeidx)
     
     if (o->count == o->capacity) {
-        if (o->capacity > SIZE_MAX / 2) {
+        if (o->capacity > INT_MAX / 2) {
             return 0;
         }
-        size_t newcap = 2 * o->capacity;
+        int newcap = 2 * o->capacity;
         
         struct BStringTrie__node *newarr = BAllocArray(newcap, sizeof(newarr[0]));
         if (!newarr) {
@@ -86,7 +87,7 @@ static int BStringTrie__new_node (BStringTrie *o, int *out_nodeidx)
     
     node->value_links[0] = BSTRINGTRIE_DEFAULT_VALUE;
     
-    for (size_t i = 0; i < BSTRINGTRIE_DEGREE; i++) {
+    for (int i = 0; i < BSTRINGTRIE_DEGREE; i++) {
         node->value_links[1 + i] = -1;
     }