Fix fuzzer copile.

This commit is contained in:
Syoyo Fujita
2022-07-19 03:25:15 +09:00
parent e1efe99243
commit d8cf6801ac
4 changed files with 49 additions and 11 deletions

View File

@@ -3299,7 +3299,6 @@ bool AsciiParser::ReadBasicType(uint32_t *value) {
// std::cout << "ReadInt token: " << ss.str() << "\n";
// TODO(syoyo): Use ryu parse.
#if defined(__cpp_exceptions) || defined(__EXCEPTIONS)
try {
(*value) = std::stoull(ss.str());
@@ -3312,11 +3311,29 @@ bool AsciiParser::ReadBasicType(uint32_t *value) {
PushError("64bit unsigned integer value out of range.\n");
return false;
}
return true;
#else
(*value) = uint32_t(std::stoul(ss.str()));
// use jsteemann/atoi
int retcode;
auto result = jsteemann::atoi<uint32_t>(ss.str().c_str(), ss.str().c_str() + ss.str().size(), retcode);
if (retcode == jsteemann::SUCCESS) {
(*value) = result;
return true;
} else if (retcode == jsteemann::INVALID_INPUT) {
PushError("Not an 32bit unsigned integer literal.\n");
return false;
} else if (retcode == jsteemann::INVALID_NEGATIVE_SIGN) {
PushError("Negative sign `-` specified for uint32 integer.\n");
return false;
} else if (retcode == jsteemann::OVERFLOW) {
PushError("Integer value overflows.\n");
return false;
}
PushError("Invalid integer literal\n");
return false;
#endif
return true;
}
template <>
@@ -3396,13 +3413,32 @@ bool AsciiParser::ReadBasicType(uint64_t *value) {
PushError("64bit unsigned integer value out of range.\n");
return false;
}
return true;
#else
(*value) = std::stoull(ss.str());
// use jsteemann/atoi
int retcode;
auto result = jsteemann::atoi<uint64_t>(ss.str().c_str(), ss.str().c_str() + ss.str().size(), retcode);
if (retcode == jsteemann::SUCCESS) {
(*value) = result;
return true;
} else if (retcode == jsteemann::INVALID_INPUT) {
PushError("Not an 32bit unsigned integer literal.\n");
return false;
} else if (retcode == jsteemann::INVALID_NEGATIVE_SIGN) {
PushError("Negative sign `-` specified for uint32 integer.\n");
return false;
} else if (retcode == jsteemann::OVERFLOW) {
PushError("Integer value overflows.\n");
return false;
}
PushError("Invalid integer literal\n");
return false;
#endif
// std::cout << "read int ok\n";
return true;
}
#if 0

View File

@@ -0,0 +1 @@
CXX=clang++ CC=clang meson build -Db_sanitize=address

View File

@@ -10,10 +10,12 @@ tinyusdz_sources=[
'../../src/prim-types.cc',
'../../src/usdObj.cc',
'../../src/primvar.cc',
'../../src/usda-parser.cc',
'../../src/ascii-parser.cc',
'../../src/usda-reader.cc',
'../../src/usda-writer.cc',
'../../src/usdc-parser.cc',
'../../src/usdc-reader.cc',
'../../src/usdc-writer.cc',
'../../src/crate-reader.cc',
'../../src/crate-format.cc',
'../../src/crate-pprint.cc',
'../../src/value-type.cc',
@@ -56,7 +58,6 @@ executable('fuzz_intcoding',
executable('fuzz_usdaparser',
'usdaparser_fuzzmain.cc',
tinyusdz_sources,
'../../src/usda-parser.cc',
install: true,
include_directories : incdirs,
cpp_args : '-fsanitize=address,fuzzer',

View File

@@ -1,7 +1,7 @@
#include <cstdint>
#include "tinyusdz.hh"
#include "usda-parser.hh"
#include "usda-reader.hh"
static void parse_usda(const uint8_t *data, size_t size)
{
@@ -18,9 +18,9 @@ static void parse_usda(const uint8_t *data, size_t size)
tinyusdz::StreamReader sr(buf.data(), total_size, /* endianswap */false);
tinyusdz::usda::USDAParser parser(&sr);
tinyusdz::usda::USDAReader reader(&sr);
bool ret = parser.Parse();
bool ret = reader.Read();
(void)ret;
return;