summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Power <noel.power@suse.com>2013-08-19 16:58:07 +0100
committerNoel Power <noel.power@suse.com>2013-08-20 08:59:54 +0100
commit4c9a08e78b6e2c5d19628281bd4141c268299bea (patch)
tree4262ec84b904c49a878f12bed16a01ba12f7c5b4
parent2d95a1bfd6e0adff791d9e381f0ec37470312522 (diff)
fix for fdo#62323 bad conversion of Hex strings for certain values
Basic hex literals are basic Integer ( e.g. 4 byte ) types with -2,147,483,648 through 2,147,483,647 range. Interally the scanner was using a long to form/scan the literal, this led to bad behaviour on 64bit linux ( where normally long -> 8 bytes ) Change-Id: I1d0fcc55ed0eda636da1445329737d1684e69f33
-rw-r--r--basic/qa/basic_coverage/test_hexliteral_negIntLimit-2.vb18
-rw-r--r--basic/qa/basic_coverage/test_hexliteral_negIntLimit.vb18
-rw-r--r--basic/qa/basic_coverage/test_hexliteral_posIntLimit.vb18
-rw-r--r--basic/qa/basic_coverage/test_hexliteral_zeroIntLimit.vb18
-rw-r--r--basic/source/comp/scanner.cxx4
5 files changed, 75 insertions, 1 deletions
diff --git a/basic/qa/basic_coverage/test_hexliteral_negIntLimit-2.vb b/basic/qa/basic_coverage/test_hexliteral_negIntLimit-2.vb
new file mode 100644
index 000000000000..f33d74cf8dd9
--- /dev/null
+++ b/basic/qa/basic_coverage/test_hexliteral_negIntLimit-2.vb
@@ -0,0 +1,18 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+
+Function doUnitTest as Integer
+ Dim lngDecimal as Long
+ lngDecimal = Clng(&HFFFFFFFF)
+ If lngDecimal = -1 Then
+ doUnitTest = 1
+ Else
+ doUnitTest = 0
+ End If
+End Function
diff --git a/basic/qa/basic_coverage/test_hexliteral_negIntLimit.vb b/basic/qa/basic_coverage/test_hexliteral_negIntLimit.vb
new file mode 100644
index 000000000000..f33d74cf8dd9
--- /dev/null
+++ b/basic/qa/basic_coverage/test_hexliteral_negIntLimit.vb
@@ -0,0 +1,18 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+
+Function doUnitTest as Integer
+ Dim lngDecimal as Long
+ lngDecimal = Clng(&HFFFFFFFF)
+ If lngDecimal = -1 Then
+ doUnitTest = 1
+ Else
+ doUnitTest = 0
+ End If
+End Function
diff --git a/basic/qa/basic_coverage/test_hexliteral_posIntLimit.vb b/basic/qa/basic_coverage/test_hexliteral_posIntLimit.vb
new file mode 100644
index 000000000000..c660486a5618
--- /dev/null
+++ b/basic/qa/basic_coverage/test_hexliteral_posIntLimit.vb
@@ -0,0 +1,18 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+
+Function doUnitTest as Integer
+ Dim lngDecimal as Long
+ lngDecimal = Clng(&H80000000)
+ If lngDecimal = -2147483648 Then
+ doUnitTest = 1
+ Else
+ doUnitTest = 0
+ End If
+End Function
diff --git a/basic/qa/basic_coverage/test_hexliteral_zeroIntLimit.vb b/basic/qa/basic_coverage/test_hexliteral_zeroIntLimit.vb
new file mode 100644
index 000000000000..1a02bdebfb6f
--- /dev/null
+++ b/basic/qa/basic_coverage/test_hexliteral_zeroIntLimit.vb
@@ -0,0 +1,18 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+
+Function doUnitTest as Integer
+ Dim lngDecimal as Long
+ lngDecimal = Clng(&H0)
+ If lngDecimal = 0 Then
+ doUnitTest = 1
+ Else
+ doUnitTest = 0
+ End If
+End Function
diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx
index 728187ce0fda..b59e22ac263c 100644
--- a/basic/source/comp/scanner.cxx
+++ b/basic/source/comp/scanner.cxx
@@ -413,7 +413,9 @@ bool SbiScanner::NextSym()
return true;
}
bNumber = true;
- long l = 0;
+ // Hex literals are signed Integers ( as defined by basic
+ // e.g. -2,147,483,648 through 2,147,483,647 (signed)
+ sal_Int32 l = 0;
int i;
bool bBufOverflow = false;
while(nCol < aLine.getLength() && theBasicCharClass::get().isAlphaNumeric(aLine[nCol] & 0xFF, bCompatible))