mirror of
https://github.com/lighttransport/tinyusdz.git
synced 2026-01-18 01:11:17 +01:00
Fix fuzzer copile.
This commit is contained in:
@@ -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
|
||||
|
||||
1
tests/fuzzer/bootstrap.sh
Normal file
1
tests/fuzzer/bootstrap.sh
Normal file
@@ -0,0 +1 @@
|
||||
CXX=clang++ CC=clang meson build -Db_sanitize=address
|
||||
@@ -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',
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user