Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F8593
work
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Authored By
•
bzimport
Nov 22 2014, 12:04 AM
2014-11-22 00:04:02 (UTC+0)
Size
1 KB
Referenced Files
None
Subscribers
None
work
View Options
Index: includes/libs/JavaScriptMinifier.php
===================================================================
--- includes/libs/JavaScriptMinifier.php (revision 103834)
+++ includes/libs/JavaScriptMinifier.php (working copy)
@@ -484,23 +484,34 @@
$end++;
}
} elseif(
+ $ch === '0'
+ && ($pos + 1 < $length) && ($s[$pos + 1] === 'x' || $s[$pos + 1] === 'X' )
+ ) {
+ // Hex numeric literal
+ $end++; // x or X
+ $end += strspn( $s, '0123456789ABCDEF', $end );
+ // @fixme if no hex digits, parse error
+ } elseif(
ctype_digit( $ch )
|| ( $ch === '.' && $pos + 1 < $length && ctype_digit( $s[$pos + 1] ) )
) {
- // Numeric literal. Search for the end of it, but don't care about [+-]exponent
- // at the end, as the results of "numeric [+-] numeric" and "numeric" are
- // identical to our state machine.
- $end += strspn( $s, '0123456789ABCDEFabcdefXx.', $end );
- while( $s[$end - 1] === '.' ) {
- // Special case: When a numeric ends with a dot, we have to check the
- // literal for proper syntax
- $decimal = strspn( $s, '0123456789', $pos, $end - $pos - 1 );
- if( $decimal === $end - $pos - 1 ) {
- break;
- } else {
- $end--;
- }
+ $end += strspn( $s, '0123456789', $end );
+ $decimal = strspn( $s, '.', $end );
+ if ($decimal) {
+ $end += $decimal;
+ $end += strspn( $s, '0123456789', $end );
+ // @fixme If no decimal digits after the . we cannot be followed
+ // by an identifier, and should throw a parse error
}
+ $exponent = strspn( $s, 'eE', $end );
+ if( $exponent ) {
+ $end += $exponent;;
+ // + sign is optional; - sign is required.
+ $end += strspn( $s, '-+', $end );
+ $end += strspn( $s, '0123456789', $end );
+ // @fixme if no decimal digits after the e/+/- we should
+ // throw a parse error
+ }
} elseif( isset( $opChars[$ch] ) ) {
// Punctuation character. Search for the longest matching operator.
while(
File Metadata
Details
Attached
Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
8111
Default Alt Text
work (1 KB)
Attached To
Mode
T34548: Possible bug in minifier: exponents can be incorrectly broken across lines
Attached
Detach File
Event Timeline
Log In to Comment