}
UPDATE_DATA(ht, p, pData, nDataSize);
HANDLE_UNBLOCK_INTERRUPTIONS();
- if ((long)h >= (long)ht->nNextFreeElement) {
+ if ((long)h >= (long)ht->nNextFreeElement || !ht->nNumOfElements) {
ht->nNextFreeElement = h + 1;
}
if (pDest) {
CONNECT_TO_GLOBAL_DLLIST(p, ht);
HANDLE_UNBLOCK_INTERRUPTIONS();
- if ((long)h >= (long)ht->nNextFreeElement) {
+ if ((long)h >= (long)ht->nNextFreeElement || !ht->nNumOfElements) {
ht->nNextFreeElement = h + 1;
}
ht->nNumOfElements++;
#define HANDLE_NUMERIC(key, length, func) { \
register char *tmp=key; \
\
+ if (*tmp=='-') { \
+ tmp++; \
+ } \
if ((*tmp>='0' && *tmp<='9')) do { /* possibly a numeric index */ \
- char *end=tmp+length-1; \
+ char *end=key+length-1; \
ulong idx; \
\
if (*tmp++=='0' && length>2) { /* don't accept numbers with leading zeros */ \
tmp++; \
} \
if (tmp==end && *tmp=='\0') { /* a numeric index */ \
- idx = strtol(key, NULL, 10); \
- if (idx!=LONG_MAX) { \
- return func; \
+ if (*key=='-') { \
+ idx = strtol(key, NULL, 10); \
+ if (idx!=LONG_MIN) { \
+ return func; \
+ } \
+ } else { \
+ idx = strtol(key, NULL, 10); \
+ if (idx!=LONG_MAX) { \
+ return func; \
+ } \
} \
} \
} while (0); \
--- /dev/null
+--TEST--
+--FILE--
+<?php
+
+echo "==Mixed==\n";
+$a = array(-1=>'a', '-2'=>'b', 3=>'c', '4'=>'d', 5=>'e', '6001'=>'f', '07'=>'g');
+
+foreach($a as $k => $v) {
+ var_dump($k);
+ var_dump($v);
+}
+
+echo "==Normal==\n";
+$b = array();
+$b[] = 'a';
+
+foreach($b as $k => $v) {
+ var_dump($k);
+ var_dump($v);
+}
+
+echo "==Negative==\n";
+$c = array('-2' => 'a');
+$c[] = 'b';
+
+foreach($c as $k => $v) {
+ var_dump($k);
+ var_dump($v);
+}
+
+echo "==Done==\n";
+?>
+--EXPECT--
+==Mixed==
+int(-1)
+string(1) "a"
+int(-2)
+string(1) "b"
+int(3)
+string(1) "c"
+int(4)
+string(1) "d"
+int(5)
+string(1) "e"
+int(6001)
+string(1) "f"
+string(2) "07"
+string(1) "g"
+==Normal==
+int(0)
+string(1) "a"
+==Negative==
+int(-2)
+string(1) "a"
+int(-1)
+string(1) "b"
+==Done==