]> mj.ucw.cz Git - libucw.git/commitdiff
conf2: dynamic arrays allow negative maximal length
authorRobert Spalek <robert@ucw.cz>
Tue, 25 Apr 2006 21:39:03 +0000 (23:39 +0200)
committerRobert Spalek <robert@ucw.cz>
Tue, 25 Apr 2006 21:39:03 +0000 (23:39 +0200)
lib/conf2.c

index 6da139503dcb75947e9a875d1ef20af004cf0959..dea5e1119b5d2ec053bc312de31c091c3c86bf27 100644 (file)
@@ -689,7 +689,7 @@ interpret_add_dynamic(struct cf_item *item, int number, byte **pars, int *proces
   uns size = type_size(item->type, item->u.utype);
   ASSERT(size >= sizeof(uns));
   int old_nr = * (int*) (old_p - size);
   uns size = type_size(item->type, item->u.utype);
   ASSERT(size >= sizeof(uns));
   int old_nr = * (int*) (old_p - size);
-  int taken = MIN(number, item->number-old_nr);
+  int taken = MIN(number, ABS(item->number)-old_nr);
   *processed = taken;
   // stretch the dynamic array
   void *new_p = cf_malloc((old_nr + taken + 1) * size) + size;
   *processed = taken;
   // stretch the dynamic array
   void *new_p = cf_malloc((old_nr + taken + 1) * size) + size;
@@ -802,7 +802,7 @@ interpret_set_item(struct cf_item *item, int number, byte **pars, int *processed
     case CC_DYNAMIC:
       if (!allow_dynamic)
        return "Dynamic array cannot be used here";
     case CC_DYNAMIC:
       if (!allow_dynamic)
        return "Dynamic array cannot be used here";
-      taken = MIN(number, item->number);
+      taken = MIN(number, ABS(item->number));
       *processed = taken;
       return interpret_set_dynamic(item, taken, pars, ptr);
     case CC_PARSER:
       *processed = taken;
       return interpret_set_dynamic(item, taken, pars, ptr);
     case CC_PARSER: