Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
None
-
None
-
Fully Compatible
-
ALL
Description
The Windows debug build has some runtime tests (in the debug version of the MSVC "C" runtime library) that other builds don't have. test.exe prints some errors in its debug build that indicate code problems.
http://buildlogs.mongodb.org/Windows%2064-bit%20DEBUG/builds/928/test/core/test.exe
Sat Aug 03 11:16:52.043 [testsuite] going to run suite: json
|
// ... snip ...
|
Sat Aug 03 11:16:52.152 [testsuite] going to run test: class JsonTests::FromJsonTests::UnquotedFieldNameBad18
|
Sat Aug 03 11:16:52.152 [testsuite] *** C runtime error: f:\dd\vctools\crt_bld\self_64_amd64\crt\src\isctype.c(56) : Assertion failed: (unsigned)(c + 1) <= 256
|
Sat Aug 03 11:16:53.010 [testsuite] test.exe ...\src\mongo\util\stacktrace.cpp(169) mongo::printStackTrace+0x5b
|
Sat Aug 03 11:16:53.010 [testsuite] test.exe ...\src\mongo\util\stacktrace.cpp(284) mongo::crtDebugCallback+0x137
|
Sat Aug 03 11:16:53.010 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgrptt.c(605) _VCrtDbgReportW+0x812
|
Sat Aug 03 11:16:53.010 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgrpt.c(242) _CrtDbgReportWV+0x43
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgrpt.c(258) _CrtDbgReportW+0x4d
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\isctype.c(56) _chvalidator+0x3f
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\_ctype.c(188) isspace+0x1f
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\db\json.cpp(912) mongo::JParse::accept+0x64
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\db\json.cpp(172) mongo::JParse::object+0xe1
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\db\json.cpp(981) mongo::fromjson+0x105
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\db\json.cpp(992) mongo::fromjson+0x45
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\dbtests\jsontests.cpp(458) JsonTests::FromJsonTests::Bad::run+0xa7
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\unittest\unittest.h(296) mongo::unittest::Suite::runTestObject<JsonTests::FromJsonTests::UnquotedFieldNameBad18>+0x33
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\third_party\boost\boost\function\function_template.hpp(113) boost::detail::function::void_function_invoker0<void (__cdecl*)(void),void>::invoke+0x2f
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\third_party\boost\boost\function\function_template.hpp(761) boost::function0<void>::operator()+0x87
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\unittest\unittest.h(194) mongo::unittest::TestHolder::run+0x2f
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\unittest\unittest.cpp(164) mongo::unittest::Suite::run+0x74b
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\unittest\unittest.cpp(228) mongo::unittest::Suite::run+0x498
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\dbtests\framework.cpp(270) mongo::dbtests::runDbTests+0x1328
|
Sat Aug 03 11:16:53.026 [testsuite] test.exe ...\src\mongo\dbtests\dbtests.cpp(41) dbtestsMain+0x170
|
Since isspace() takes an int, we need to prevent sign-extension of chars that have the high bit set.
src/mongo/db/json.cpp lines 906 to 914:
bool JParse::accept(const char* token, bool advance) {
|
MONGO_JSON_DEBUG("token: " << token);
|
const char* check = _input;
|
if (token == NULL) {
|
return false;
|
}
|
while (check < _input_end && isspace(*check)) {
|
++check;
|
}
|
The same problem exists elsewhere in this file:
Sat Aug 03 11:16:57.378 [testsuite] *** C runtime error: f:\dd\vctools\crt_bld\self_64_amd64\crt\src\isctype.c(56) : Assertion failed: (unsigned)(c + 1) <= 256
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\util\stacktrace.cpp(169) mongo::printStackTrace+0x5b
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\util\stacktrace.cpp(284) mongo::crtDebugCallback+0x137
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgrptt.c(605) _VCrtDbgReportW+0x812
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgrpt.c(242) _CrtDbgReportWV+0x43
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\dbgrpt.c(258) _CrtDbgReportW+0x4d
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\isctype.c(56) _chvalidator+0x3f
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\_ctype.c(188) isspace+0x1f
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\db\json.cpp(770) mongo::JParse::field+0xbe
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\db\json.cpp(183) mongo::JParse::object+0x1b6
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\db\json.cpp(981) mongo::fromjson+0x105
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\db\json.cpp(992) mongo::fromjson+0x45
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\dbtests\jsontests.cpp(458) JsonTests::FromJsonTests::Bad::run+0xa7
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\unittest\unittest.h(296) mongo::unittest::Suite::runTestObject<JsonTests::FromJsonTests::UnquotedFieldNameBad18>+0x33
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\third_party\boost\boost\function\function_template.hpp(113) boost::detail::function::void_function_invoker0<void (__cdecl*)(void),void>::invoke+0x2f
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\third_party\boost\boost\function\function_template.hpp(761) boost::function0<void>::operator()+0x87
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\unittest\unittest.h(194) mongo::unittest::TestHolder::run+0x2f
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\unittest\unittest.cpp(164) mongo::unittest::Suite::run+0x74b
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\unittest\unittest.cpp(228) mongo::unittest::Suite::run+0x498
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\dbtests\framework.cpp(270) mongo::dbtests::runDbTests+0x1328
|
Sat Aug 03 11:16:58.252 [testsuite] test.exe ...\src\mongo\dbtests\dbtests.cpp(41) dbtestsMain+0x170
|
src/mongo/db/json.cpp lines 761 to 770:
Status JParse::field(std::string* result) {
|
MONGO_JSON_DEBUG("");
|
if (accept(DOUBLEQUOTE, false) || accept(SINGLEQUOTE, false)) {
|
// Quoted key
|
// TODO: make sure quoted field names cannot contain null characters
|
return quotedString(result);
|
}
|
else {
|
// Unquoted key
|
while (_input < _input_end && isspace(*_input)) ++_input;
|