@@ -10569,7 +10569,19 @@ priv_problem_status_json(
1056910569 }
1057010570
1057110571 // whether statement is available
10572- if (variant > 0 && prob->xml.a[variant - 1]) {
10572+ if (prob->variant_num > 0 && variant > 0 && prob->md_size > 0 && variant <= prob->md_size) {
10573+ struct md_content *mdp = &prob->md_files[variant - 1];
10574+ if (mdp->size > 0) {
10575+ cJSON_AddTrueToObject(jp, "is_statement_avaiable");
10576+ cJSON_AddNumberToObject(jp, "est_stmt_size", mdp->size);
10577+ }
10578+ } else if (prob->variant_num <= 0 && variant <= 0 && prob->md_size == 1) {
10579+ struct md_content *mdp = &prob->md_files[0];
10580+ if (mdp->size > 0) {
10581+ cJSON_AddTrueToObject(jp, "is_statement_avaiable");
10582+ cJSON_AddNumberToObject(jp, "est_stmt_size", mdp->size);
10583+ }
10584+ } else if (variant > 0 && prob->xml.a[variant - 1]) {
1057310585 cJSON_AddTrueToObject(jp, "is_statement_avaiable");
1057410586 // FIXME: calculate size estimate?
1057510587 cJSON_AddNumberToObject(jp, "est_stmt_size", 4096);
@@ -17657,7 +17669,19 @@ unpriv_problem_status_json(
1765717669 fprintf(fout, ",\n \"max_rss_size\": \"%llu\"", prob->max_rss_size);
1765817670 }
1765917671 // whether statement is available
17660- if (variant > 0 && prob->xml.a[variant - 1]) {
17672+ if (prob->variant_num > 0 && variant > 0 && prob->md_size > 0 && variant <= prob->md_size) {
17673+ struct md_content *pmd = &prob->md_files[variant - 1];
17674+ if (pmd->size > 0) {
17675+ fprintf(fout, ",\n \"is_statement_avaiable\": %s", to_json_bool(1));
17676+ fprintf(fout, ",\n \"est_stmt_size\": %zu", pmd->size);
17677+ }
17678+ } else if (prob->variant_num <= 0 && variant <= 0 && prob->md_size == 1) {
17679+ struct md_content *pmd = &prob->md_files[0];
17680+ if (pmd->size > 0) {
17681+ fprintf(fout, ",\n \"is_statement_avaiable\": %s", to_json_bool(1));
17682+ fprintf(fout, ",\n \"est_stmt_size\": %zu", pmd->size);
17683+ }
17684+ } else if (variant > 0 && prob->xml.a[variant - 1]) {
1766117685 fprintf(fout, ",\n \"is_statement_avaiable\": %s", to_json_bool(1));
1766217686 // FIXME: calculate size estimate?
1766317687 fprintf(fout, ",\n \"est_stmt_size\": %d", 4096);
@@ -17849,15 +17873,25 @@ unpriv_problem_statement_json(
1784917873 }
1785017874
1785117875 problem_xml_t px = NULL;
17852- if (variant > 0 && prob->xml.a && prob->xml.a[variant - 1]) {
17853- px = prob->xml.a[variant - 1];
17854- } else if (variant <= 0 && prob->xml.p) {
17855- px = prob->xml.p;
17856- }
17857- if (!px || !px->stmts) {
17858- goto fail;
17876+ struct md_content *pmd = NULL;
17877+ if (prob->variant_num > 0 && variant > 0 && prob->md_size > 0 && variant <= prob->md_size) {
17878+ pmd = &prob->md_files[variant - 1];
17879+ } else if (prob->variant_num <= 0 && variant <= 0 && prob->md_size == 1) {
17880+ pmd = &prob->md_files[0];
17881+ }
17882+ if (pmd && pmd->size > 0) {
17883+ fwrite_unlocked(pmd->data, 1, pmd->size, fout);
17884+ } else {
17885+ if (variant > 0 && prob->xml.a && prob->xml.a[variant - 1]) {
17886+ px = prob->xml.a[variant - 1];
17887+ } else if (variant <= 0 && prob->xml.p) {
17888+ px = prob->xml.p;
17889+ }
17890+ if (!px || !px->stmts) {
17891+ goto fail;
17892+ }
17893+ ns_unparse_statement(fout, phr, cnts, extra, prob, 0, px, NULL, 0);
1785917894 }
17860- ns_unparse_statement(fout, phr, cnts, extra, prob, 0, px, NULL, 0);
1786117895
1786217896cleanup:
1786317897 html_armor_free(&ab);
0 commit comments