Skip to content

Commit 1a96987

Browse files
sapiersapier
sapier
authored and
sapier
committedNov 4, 2013
Fix invalid use of pointer to temporary object in json2lua conversion
1 parent 7be1865 commit 1a96987

File tree

1 file changed

+31
-27
lines changed

1 file changed

+31
-27
lines changed
 

‎src/convert_json.cpp

+31-27
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,17 @@ std::vector<ModStoreMod> readModStoreList(Json::Value& modlist) {
105105

106106
//id
107107
if (modlist[i]["id"].asString().size()) {
108-
const char* id_raw = modlist[i]["id"].asString().c_str();
108+
std::string id_raw = modlist[i]["id"].asString();
109109
char* endptr = 0;
110-
int numbervalue = strtol(id_raw,&endptr,10);
110+
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
111111

112-
if ((*id_raw != 0) && (*endptr == 0)) {
112+
if ((id_raw != "") && (*endptr == 0)) {
113113
toadd.id = numbervalue;
114114
}
115+
else {
116+
errorstream << "readModStoreList: missing id" << std::endl;
117+
toadd.valid = false;
118+
}
115119
}
116120
else {
117121
errorstream << "readModStoreList: missing id" << std::endl;
@@ -163,11 +167,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
163167
ModStoreVersionEntry toadd;
164168

165169
if (details["version_set"][i]["id"].asString().size()) {
166-
const char* id_raw = details["version_set"][i]["id"].asString().c_str();
170+
std::string id_raw = details["version_set"][i]["id"].asString();
167171
char* endptr = 0;
168-
int numbervalue = strtol(id_raw,&endptr,10);
172+
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
169173

170-
if ((*id_raw != 0) && (*endptr == 0)) {
174+
if ((id_raw != "") && (*endptr == 0)) {
171175
toadd.id = numbervalue;
172176
}
173177
}
@@ -215,11 +219,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
215219

216220
if (details["categories"][i]["id"].asString().size()) {
217221

218-
const char* id_raw = details["categories"][i]["id"].asString().c_str();
222+
std::string id_raw = details["categories"][i]["id"].asString();
219223
char* endptr = 0;
220-
int numbervalue = strtol(id_raw,&endptr,10);
224+
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
221225

222-
if ((*id_raw != 0) && (*endptr == 0)) {
226+
if ((id_raw != "") && (*endptr == 0)) {
223227
toadd.id = numbervalue;
224228
}
225229
}
@@ -248,11 +252,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
248252
if (details["author"].isObject()) {
249253
if (details["author"]["id"].asString().size()) {
250254

251-
const char* id_raw = details["author"]["id"].asString().c_str();
255+
std::string id_raw = details["author"]["id"].asString();
252256
char* endptr = 0;
253-
int numbervalue = strtol(id_raw,&endptr,10);
257+
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
254258

255-
if ((*id_raw != 0) && (*endptr == 0)) {
259+
if ((id_raw != "") && (*endptr == 0)) {
256260
retval.author.id = numbervalue;
257261
}
258262
else {
@@ -282,11 +286,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
282286
if (details["license"].isObject()) {
283287
if (details["license"]["id"].asString().size()) {
284288

285-
const char* id_raw = details["license"]["id"].asString().c_str();
289+
std::string id_raw = details["license"]["id"].asString();
286290
char* endptr = 0;
287-
int numbervalue = strtol(id_raw,&endptr,10);
291+
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
288292

289-
if ((*id_raw != 0) && (*endptr == 0)) {
293+
if ((id_raw != "") && (*endptr == 0)) {
290294
retval.license.id = numbervalue;
291295
}
292296
}
@@ -313,11 +317,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
313317
if (details["titlepic"].isObject()) {
314318
if (details["titlepic"]["id"].asString().size()) {
315319

316-
const char* id_raw = details["titlepic"]["id"].asString().c_str();
320+
std::string id_raw = details["titlepic"]["id"].asString();
317321
char* endptr = 0;
318-
int numbervalue = strtol(id_raw,&endptr,10);
322+
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
319323

320-
if ((*id_raw != 0) && (*endptr == 0)) {
324+
if ((id_raw != "") && (*endptr == 0)) {
321325
retval.titlepic.id = numbervalue;
322326
}
323327
}
@@ -332,11 +336,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
332336

333337
if (details["titlepic"]["mod"].asString().size()) {
334338

335-
const char* mod_raw = details["titlepic"]["mod"].asString().c_str();
339+
std::string mod_raw = details["titlepic"]["mod"].asString();
336340
char* endptr = 0;
337-
int numbervalue = strtol(mod_raw,&endptr,10);
341+
int numbervalue = strtol(mod_raw.c_str(),&endptr,10);
338342

339-
if ((*mod_raw != 0) && (*endptr == 0)) {
343+
if ((mod_raw != "") && (*endptr == 0)) {
340344
retval.titlepic.mod = numbervalue;
341345
}
342346
}
@@ -345,11 +349,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
345349
//id
346350
if (details["id"].asString().size()) {
347351

348-
const char* id_raw = details["id"].asString().c_str();
352+
std::string id_raw = details["id"].asString();
349353
char* endptr = 0;
350-
int numbervalue = strtol(id_raw,&endptr,10);
354+
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
351355

352-
if ((*id_raw != 0) && (*endptr == 0)) {
356+
if ((id_raw != "") && (*endptr == 0)) {
353357
retval.id = numbervalue;
354358
}
355359
}
@@ -389,11 +393,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
389393
//value
390394
if (details["rating"].asString().size()) {
391395

392-
const char* id_raw = details["rating"].asString().c_str();
396+
std::string id_raw = details["rating"].asString();
393397
char* endptr = 0;
394-
float numbervalue = strtof(id_raw,&endptr);
398+
float numbervalue = strtof(id_raw.c_str(),&endptr);
395399

396-
if ((*id_raw != 0) && (*endptr == 0)) {
400+
if ((id_raw != "") && (*endptr == 0)) {
397401
retval.rating = numbervalue;
398402
}
399403
}

0 commit comments

Comments
 (0)
Please sign in to comment.