зеркало из https://github.com/mozilla/pjs.git
Bug 584252 - disallow non-standard extensions to float syntax (r=jorendorff) (CLOSED TREE)
This commit is contained in:
Родитель
5e93fcc2a3
Коммит
d23c6043b4
|
@ -123,16 +123,6 @@
|
||||||
* (e.g., some HP systems), it may be necessary to #define NAN_WORD0
|
* (e.g., some HP systems), it may be necessary to #define NAN_WORD0
|
||||||
* appropriately -- to the most significant word of a quiet NaN.
|
* appropriately -- to the most significant word of a quiet NaN.
|
||||||
* (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
|
* (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
|
||||||
* When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined,
|
|
||||||
* strtod also accepts (case insensitively) strings of the form
|
|
||||||
* NaN(x), where x is a string of hexadecimal digits and spaces;
|
|
||||||
* if there is only one string of hexadecimal digits, it is taken
|
|
||||||
* for the 52 fraction bits of the resulting NaN; if there are two
|
|
||||||
* or more strings of hex digits, the first is for the high 20 bits,
|
|
||||||
* the second and subsequent for the low 32 bits, with intervening
|
|
||||||
* white space ignored; but if this results in none of the 52
|
|
||||||
* fraction bits being on (an IEEE Infinity symbol), then NAN_WORD0
|
|
||||||
* and NAN_WORD1 are used instead.
|
|
||||||
* #define MULTIPLE_THREADS if the system offers preemptively scheduled
|
* #define MULTIPLE_THREADS if the system offers preemptively scheduled
|
||||||
* multiple threads. In this case, you must provide (or suitably
|
* multiple threads. In this case, you must provide (or suitably
|
||||||
* #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed
|
* #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed
|
||||||
|
@ -1531,76 +1521,6 @@ match
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef No_Hex_NaN
|
|
||||||
static void
|
|
||||||
hexnan
|
|
||||||
#ifdef KR_headers
|
|
||||||
(rvp, sp) U *rvp; CONST char **sp;
|
|
||||||
#else
|
|
||||||
(U *rvp, CONST char **sp)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
ULong c, x[2];
|
|
||||||
CONST char *s;
|
|
||||||
int havedig, udx0, xshift;
|
|
||||||
|
|
||||||
x[0] = x[1] = 0;
|
|
||||||
havedig = xshift = 0;
|
|
||||||
udx0 = 1;
|
|
||||||
s = *sp;
|
|
||||||
/* allow optional initial 0x or 0X */
|
|
||||||
while((c = *(CONST unsigned char*)(s+1)) && c <= ' ')
|
|
||||||
++s;
|
|
||||||
if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X'))
|
|
||||||
s += 2;
|
|
||||||
while((c = *(CONST unsigned char*)++s)) {
|
|
||||||
if (c >= '0' && c <= '9')
|
|
||||||
c -= '0';
|
|
||||||
else if (c >= 'a' && c <= 'f')
|
|
||||||
c += 10 - 'a';
|
|
||||||
else if (c >= 'A' && c <= 'F')
|
|
||||||
c += 10 - 'A';
|
|
||||||
else if (c <= ' ') {
|
|
||||||
if (udx0 && havedig) {
|
|
||||||
udx0 = 0;
|
|
||||||
xshift = 1;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
#ifdef GDTOA_NON_PEDANTIC_NANCHECK
|
|
||||||
else if (/*(*/ c == ')' && havedig) {
|
|
||||||
*sp = s + 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return; /* invalid form: don't change *sp */
|
|
||||||
#else
|
|
||||||
else {
|
|
||||||
do {
|
|
||||||
if (/*(*/ c == ')') {
|
|
||||||
*sp = s + 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while((c = *++s));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
havedig = 1;
|
|
||||||
if (xshift) {
|
|
||||||
xshift = 0;
|
|
||||||
x[0] = x[1];
|
|
||||||
x[1] = 0;
|
|
||||||
}
|
|
||||||
if (udx0)
|
|
||||||
x[0] = (x[0] << 4) | (x[1] >> 28);
|
|
||||||
x[1] = (x[1] << 4) | c;
|
|
||||||
}
|
|
||||||
if ((x[0] &= 0xfffff) || x[1]) {
|
|
||||||
word0(*rvp) = Exp_mask | x[0];
|
|
||||||
word1(*rvp) = x[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /*No_Hex_NaN*/
|
|
||||||
#endif /* INFNAN_CHECK */
|
#endif /* INFNAN_CHECK */
|
||||||
|
|
||||||
static double
|
static double
|
||||||
|
@ -1782,10 +1702,6 @@ _strtod
|
||||||
if (match(&s, "an")) {
|
if (match(&s, "an")) {
|
||||||
word0(rv) = NAN_WORD0;
|
word0(rv) = NAN_WORD0;
|
||||||
word1(rv) = NAN_WORD1;
|
word1(rv) = NAN_WORD1;
|
||||||
#ifndef No_Hex_NaN
|
|
||||||
if (*s == '(') /*)*/
|
|
||||||
hexnan(&rv, &s);
|
|
||||||
#endif
|
|
||||||
goto ret;
|
goto ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче