From 0700bdb7ab9ea4ff3a742cb02dedd12310713fb5 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 5 Oct 2016 11:45:28 +0100 Subject: [PATCH 1/7] Conversion utf8 to utf16 and pretty-printing of Java strings Added two functions for utf8 to utf16 conversion function depending on whether we use little or big endian. Added a function utf16_little_endian_to_ascii to display nicely java strings as an ascii sequence. --- src/util/unicode.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/util/unicode.h | 4 ++++ 2 files changed, 44 insertions(+) diff --git a/src/util/unicode.cpp b/src/util/unicode.cpp index 4502605c600..12ea8d04a0f 100644 --- a/src/util/unicode.cpp +++ b/src/util/unicode.cpp @@ -7,6 +7,8 @@ Author: Daniel Kroening, kroening@kroening.com \*******************************************************************/ #include +#include +#include #include "unicode.h" @@ -253,3 +255,41 @@ const char **narrow_argv(int argc, const wchar_t **argv_wide) return argv_narrow; } + +std::wstring utf8_to_utf16_big_endian(const std::string& in) +{ + std::wstring_convert > converter; + return converter.from_bytes(in); +} + +std::wstring utf8_to_utf16_little_endian(const std::string& in) +{ + const std::codecvt_mode mode=std::codecvt_mode::little_endian; + + // default largest value codecvt_utf8_utf16 reads without error is 0x10ffff + // see: http://en.cppreference.com/w/cpp/locale/codecvt_utf8_utf16 + const unsigned long maxcode=0x10ffff; + + typedef std::codecvt_utf8_utf16 codecvt_utf8_utf16t; + std::wstring_convert converter; + return converter.from_bytes(in); +} + +std::string utf16_little_endian_to_ascii(const std::wstring& in) +{ + std::string result; + std::locale loc; + for(const auto c : in) + { + if(c<=255 && isprint(c, loc)) + result+=(unsigned char)c; + else + { + result+="\\u"; + char hex[5]; + snprintf(hex, sizeof(hex), "%04x", (wchar_t)c); + result+=hex; + } + } + return result; +} diff --git a/src/util/unicode.h b/src/util/unicode.h index edad95039f0..1e5040344d0 100644 --- a/src/util/unicode.h +++ b/src/util/unicode.h @@ -22,6 +22,10 @@ std::wstring widen(const std::string &s); std::string utf32_to_utf8(const std::basic_string &s); std::string utf16_to_utf8(const std::basic_string &s); +std::wstring utf8_to_utf16_big_endian(const std::string&); +std::wstring utf8_to_utf16_little_endian(const std::string&); +std::string utf16_little_endian_to_ascii(const std::wstring& in); + const char **narrow_argv(int argc, const wchar_t **argv_wide); #endif // CPROVER_UTIL_UNICODE_H From 37ca8de229a6588faa289fab7e6af1ff8b397df4 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 11 Jan 2017 12:25:47 +0000 Subject: [PATCH 2/7] Update travis file for using libc++ with clang compiler --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index fbd3915b515..086fd050b21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,19 +32,19 @@ matrix: before_install: - mkdir bin ; ln -s /usr/bin/clang-3.7 bin/gcc # env: COMPILER=clang++-3.7 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined,integer -fno-omit-frame-pointer" - env: COMPILER=clang++-3.7 + env: COMPILER="clang++-3.7 -stdlib=libc++" - os: osx compiler: gcc env: COMPILER=g++ - os: osx compiler: clang - env: COMPILER=clang++ + env: COMPILER="clang++ -stdlib=libc++" - env: NAME="CPP-LINT" script: scripts/run_lint.sh master HEAD || true script: - if [ -L bin/gcc ] ; then export PATH=$PWD/bin:$PATH ; fi ; make -C src minisat2-download && - make -C src CXX=$COMPILER CXXFLAGS="-Wall -O2 -g -Werror -Wno-deprecated-register -pedantic -Wno-sign-compare" -j2 && + make -C src CXX="$COMPILER" CXXFLAGS="-Wall -O2 -g -Werror -Wno-deprecated-register -pedantic -Wno-sign-compare" -j2 && env UBSAN_OPTIONS=print_stacktrace=1 make -C regression test && - make -C src CXX=$COMPILER CXXFLAGS=$FLAGS -j2 aa-symex.dir cegis.dir clobber.dir memory-models.dir musketeer.dir + make -C src CXX="$COMPILER" CXXFLAGS=$FLAGS -j2 aa-symex.dir cegis.dir clobber.dir memory-models.dir musketeer.dir From a77a85a4799ecd48d8b6866024a91b081636a3c1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 12 Jan 2017 09:25:55 +0000 Subject: [PATCH 3/7] Requiering libc++ in travis file --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 086fd050b21..f611a95efe4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,7 @@ matrix: - libwww-perl - clang-3.7 - libubsan0 + - libc++-dev before_install: - mkdir bin ; ln -s /usr/bin/clang-3.7 bin/gcc # env: COMPILER=clang++-3.7 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined,integer -fno-omit-frame-pointer" @@ -38,7 +39,7 @@ matrix: env: COMPILER=g++ - os: osx compiler: clang - env: COMPILER="clang++ -stdlib=libc++" + env: COMPILER=clang++ - env: NAME="CPP-LINT" script: scripts/run_lint.sh master HEAD || true From 3fd07362a9619abc5191b87b2426fe66209df044 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 13 Jan 2017 09:54:04 +0000 Subject: [PATCH 4/7] Ask Clang to use libstdc++ instead of libc++ --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f611a95efe4..580c559a74f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,7 @@ matrix: before_install: - mkdir bin ; ln -s /usr/bin/clang-3.7 bin/gcc # env: COMPILER=clang++-3.7 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined,integer -fno-omit-frame-pointer" - env: COMPILER="clang++-3.7 -stdlib=libc++" + env: COMPILER="clang++-3.7 -stdlib=libstdc++" - os: osx compiler: gcc env: COMPILER=g++ From 6bda7dc2bb19f3efcefba657b76a66e98cb5a6b7 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 2 Feb 2017 17:09:32 +0000 Subject: [PATCH 5/7] Requiering package libstdc++-5-dev --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 580c559a74f..2f320c6d980 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,7 @@ matrix: - clang-3.7 - libubsan0 - libc++-dev + - libstdc++-5-dev before_install: - mkdir bin ; ln -s /usr/bin/clang-3.7 bin/gcc # env: COMPILER=clang++-3.7 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined,integer -fno-omit-frame-pointer" @@ -48,4 +49,4 @@ script: make -C src minisat2-download && make -C src CXX="$COMPILER" CXXFLAGS="-Wall -O2 -g -Werror -Wno-deprecated-register -pedantic -Wno-sign-compare" -j2 && env UBSAN_OPTIONS=print_stacktrace=1 make -C regression test && - make -C src CXX="$COMPILER" CXXFLAGS=$FLAGS -j2 aa-symex.dir cegis.dir clobber.dir memory-models.dir musketeer.dir + make -C src CXX="$COMPILER" CXXFLAGS="-Wall -O2 -g -Werror -Wno-deprecated-register -pedantic -Wno-sign-compare" -j2 aa-symex.dir cegis.dir clobber.dir memory-models.dir musketeer.dir From 03166c3c17634d93cce205e53d390f0f456c61b0 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 13 Feb 2017 12:12:09 +0000 Subject: [PATCH 6/7] Fix travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2f320c6d980..8c0bb335770 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ matrix: - clang-3.7 - libubsan0 - libc++-dev - - libstdc++-5-dev + - libstdc++-5-dev before_install: - mkdir bin ; ln -s /usr/bin/clang-3.7 bin/gcc # env: COMPILER=clang++-3.7 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined,integer -fno-omit-frame-pointer" From e48731b7d1fff125243d6230bd9832bd798a769d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 13 Feb 2017 12:25:11 +0000 Subject: [PATCH 7/7] Switch to libc++ --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8c0bb335770..c702dbd8f4d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,7 @@ matrix: before_install: - mkdir bin ; ln -s /usr/bin/clang-3.7 bin/gcc # env: COMPILER=clang++-3.7 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined,integer -fno-omit-frame-pointer" - env: COMPILER="clang++-3.7 -stdlib=libstdc++" + env: COMPILER="clang++-3.7 -stdlib=libc++" - os: osx compiler: gcc env: COMPILER=g++