/* part of report class dtor */ static void Report(struct NaClApp *nap) { GString *report = g_string_sized_new(BIG_ENOUGH_STRING); char *eol = hide_report ? "; " : "\n"; /* report validator state and user return code */ g_string_append_printf(report, "%s%d%s", REPORT_VALIDATOR, validation_state, eol); g_string_append_printf(report, "%s%d%s", REPORT_RETCODE, user_code, eol); /* add memory digest to cumulative digests if asked */ if(nap != NULL && nap->manifest != NULL) if(nap->manifest->mem_tag != NULL) ReportTag(STDRAM, GetMemoryDigest(nap)); /* report tags digests and remove ending " " if exist */ g_string_append_printf(report, "%s", REPORT_ETAG); g_string_append_printf(report, "%s", digests->len == 0 ? TAG_ENGINE_DISABLED : digests->str); g_string_truncate(report, report->len - 1); /* report accounting and session message */ g_string_append_printf(report, "%s%s%s%s", eol, REPORT_ACCOUNTING, GetAccountingInfo(), eol); g_string_append_printf(report, "%s%s%s", REPORT_STATE, zvm_state, eol); /* output report */ if(hide_report) ZLOGS(LOG_ERROR, "%s", report->str); else ZLOGIF(write(STDOUT_FILENO, report->str, report->len) != report->len, "report write error %d: %s", errno, strerror(errno)); g_string_free(report, TRUE); g_string_free(digests, TRUE); }
void Report(struct NaClApp *nap) { GString *r = g_string_sized_new(BIG_ENOUGH_STRING); char *eol = report_mode == 1 ? "; " : "\n"; char *acc = FinalAccounting(); /* report validator state and user return code */ REPORT(r, "%s%d%s", REPORT_VALIDATOR, validation_state, eol); REPORT(r, "%s%d%s", REPORT_DAEMON, daemon_state, eol); REPORT(r, "%s%d%s", REPORT_RETCODE, user_code, eol); /* add memory digest to cumulative digests if asked */ if(nap != NULL && nap->manifest != NULL) if(nap->manifest->mem_tag != NULL) ReportTag(STDRAM, GetMemoryDigest(nap)); /* report tags digests and remove ending " " if exist */ REPORT(r, "%s", REPORT_ETAG); REPORT(r, "%s", digests->len == 0 ? TAG_ENGINE_DISABLED : digests->str); g_string_truncate(r, r->len - 1); /* report accounting and session message */ if(zvm_state == NULL) zvm_state = UNKNOWN_STATE; REPORT(r, "%s%s%s%s", eol, REPORT_ACCOUNTING, acc, eol); REPORT(r, "%s%s%s", REPORT_STATE, zvm_state == NULL ? UNKNOWN_STATE : zvm_state, eol); REPORT(r, "%s%s", REPORT_CMD, eol); OutputReport(r->str); g_string_free(r, TRUE); g_free(acc); }
void ReportError(Lexer *lexer, Node *element, Node *node, uint code) { lexer->warnings++; /* keep quiet after 6 errors */ if (lexer->errors > 6) return; lexer->errors++; ReportPosition(lexer); if (code == SUSPECTED_MISSING_QUOTE) { tidy_out(lexer->errout, "Error: missing quotemark for attribute value"); } else if (code == DUPLICATE_FRAMESET) { tidy_out(lexer->errout, "Error: repeated FRAMESET element"); } else if (code == UNKNOWN_ELEMENT) { tidy_out(lexer->errout, "Error: "); ReportTag(lexer, node); tidy_out(lexer->errout, " is not recognized!"); } else if (code == UNEXPECTED_ENDTAG) /* generated by XML docs */ { tidy_out(lexer->errout, "Warning: unexpected </%s>", node->element); if (element) tidy_out(lexer->errout, " in <%s>", element->element); } tidy_out(lexer->errout, "\n"); }
void ReportWarning(Lexer *lexer, Node *element, Node *node, uint code) { lexer->warnings++; /* keep quiet after 6 errors */ if (lexer->errors > 6) return; if (ShowWarnings) { /* on end of file adjust reported position to end of input */ if (code == UNEXPECTED_END_OF_FILE) { lexer->lines = lexer->in->curline; lexer->columns = lexer->in->curcol; } ReportPosition(lexer); if (code == MISSING_ENDTAG_FOR) tidy_out(lexer->errout, "Warning: missing </%s>", element->element); else if (code == MISSING_ENDTAG_BEFORE) { tidy_out(lexer->errout, "Warning: missing </%s> before ", element->element); ReportTag(lexer, node); } else if (code == DISCARDING_UNEXPECTED) { tidy_out(lexer->errout, "Warning: discarding unexpected "); ReportTag(lexer, node); } else if (code == NESTED_EMPHASIS) { tidy_out(lexer->errout, "Warning: nested emphasis "); ReportTag(lexer, node); } else if (code == COERCE_TO_ENDTAG) { tidy_out(lexer->errout, "Warning: <%s> is probably intended as </%s>", node->element, node->element); } else if (code == NON_MATCHING_ENDTAG) { tidy_out(lexer->errout, "Warning: replacing unexpected "); ReportTag(lexer, node); tidy_out(lexer->errout, " by </%s>", element->element); } else if (code == TAG_NOT_ALLOWED_IN) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " isn't allowed in <%s> elements", element->element); } else if (code == DOCTYPE_AFTER_TAGS) { tidy_out(lexer->errout, "Warning: <!DOCTYPE> isn't allowed after elements"); } else if (code == MISSING_STARTTAG) tidy_out(lexer->errout, "Warning: missing <%s>", node->element); else if (code == UNEXPECTED_ENDTAG) { tidy_out(lexer->errout, "Warning: unexpected </%s>", node->element); if (element) tidy_out(lexer->errout, " in <%s>", element->element); } else if (code == TOO_MANY_ELEMENTS) { tidy_out(lexer->errout, "Warning: too many %s elements", node->element); if (element) tidy_out(lexer->errout, " in <%s>", element->element); } else if (code == USING_BR_INPLACE_OF) { tidy_out(lexer->errout, "Warning: using <br> in place of "); ReportTag(lexer, node); } else if (code == INSERTING_TAG) tidy_out(lexer->errout, "Warning: inserting implicit <%s>", node->element); else if (code == CANT_BE_NESTED) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " can't be nested"); } else if (code == PROPRIETARY_ELEMENT) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " is not approved by W3C"); if (node->tag == tag_layer) lexer->badLayout |= USING_LAYER; else if (node->tag == tag_spacer) lexer->badLayout |= USING_SPACER; else if (node->tag == tag_nobr) lexer->badLayout |= USING_NOBR; } else if (code == OBSOLETE_ELEMENT) { if (element->tag && (element->tag->model & CM_OBSOLETE)) tidy_out(lexer->errout, "Warning: replacing obsolete element "); else tidy_out(lexer->errout, "Warning: replacing element "); ReportTag(lexer, element); tidy_out(lexer->errout, " by "); ReportTag(lexer, node); } else if (code == TRIM_EMPTY_ELEMENT) { tidy_out(lexer->errout, "Warning: trimming empty "); ReportTag(lexer, element); } else if (code == MISSING_TITLE_ELEMENT) tidy_out(lexer->errout, "Warning: inserting missing 'title' element"); else if (code == ILLEGAL_NESTING) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, element); tidy_out(lexer->errout, " shouldn't be nested"); } else if (code == NOFRAMES_CONTENT) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " not inside 'noframes' element"); } else if (code == INCONSISTENT_VERSION) { tidy_out(lexer->errout, "Warning: html doctype doesn't match content"); } else if (code == MALFORMED_DOCTYPE) { tidy_out(lexer->errout, "Warning: expected \"html PUBLIC\" or \"html SYSTEM\""); } else if (code == CONTENT_AFTER_BODY) { tidy_out(lexer->errout, "Warning: content occurs after end of body"); } else if (code == MALFORMED_COMMENT) { tidy_out(lexer->errout, "Warning: adjacent hyphens within comment"); } else if (code == BAD_COMMENT_CHARS) { tidy_out(lexer->errout, "Warning: expecting -- or >"); } else if (code == BAD_XML_COMMENT) { tidy_out(lexer->errout, "Warning: XML comments can't contain --"); } else if (code == BAD_CDATA_CONTENT) { tidy_out(lexer->errout, "Warning: '<' + '/' + letter not allowed here"); } else if (code == INCONSISTENT_NAMESPACE) { tidy_out(lexer->errout, "Warning: html namespace doesn't match content"); } else if (code == DTYPE_NOT_UPPER_CASE) { tidy_out(lexer->errout, "Warning: SYSTEM, PUBLIC, W3C, DTD, EN must be upper case"); } else if (code == UNEXPECTED_END_OF_FILE) { tidy_out(lexer->errout, "Warning: unexpected end of file"); ReportTag(lexer, element); } tidy_out(lexer->errout, "\n"); } }
void ReportAttrError(Lexer *lexer, Node *node, char *attr, uint code) { lexer->warnings++; /* keep quiet after 6 errors */ if (lexer->errors > 6) return; if (ShowWarnings) { /* on end of file adjust reported position to end of input */ if (code == UNEXPECTED_END_OF_FILE) { lexer->lines = lexer->in->curline; lexer->columns = lexer->in->curcol; } ReportPosition(lexer); if (code == UNKNOWN_ATTRIBUTE) tidy_out(lexer->errout, "Warning: unknown attribute \"%s\"", attr); else if (code == MISSING_ATTRIBUTE) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " lacks \"%s\" attribute", attr); } else if (code == MISSING_ATTR_VALUE) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " attribute \"%s\" lacks value", attr); } else if (code == MISSING_IMAGEMAP) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " should use client-side image map"); lexer->badAccess |= MISSING_IMAGE_MAP; } else if (code == BAD_ATTRIBUTE_VALUE) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " unknown attribute value \"%s\"", attr); } else if (code == XML_ATTRIBUTE_VALUE) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " has XML attribute \"%s\"", attr); } else if (code == UNEXPECTED_GT) { tidy_out(lexer->errout, "Error: "); ReportTag(lexer, node); tidy_out(lexer->errout, " missing '>' for end of tag"); lexer->errors++;; } else if (code == UNEXPECTED_QUOTEMARK) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " unexpected or duplicate quote mark"); } else if (code == REPEATED_ATTRIBUTE) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " repeated attribute \"%s\"", attr); } else if (code == PROPRIETARY_ATTR_VALUE) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " proprietary attribute value \"%s\"", attr); } else if (code == UNEXPECTED_END_OF_FILE) { tidy_out(lexer->errout, "Warning: end of file while parsing attributes"); } else if (code == ID_NAME_MISMATCH) { tidy_out(lexer->errout, "Warning: "); ReportTag(lexer, node); tidy_out(lexer->errout, " id and name attribute value mismatch"); } tidy_out(lexer->errout, "\n"); } else if (code == UNEXPECTED_GT) { ReportPosition(lexer); tidy_out(lexer->errout, "Error: "); ReportTag(lexer, node); tidy_out(lexer->errout, " missing '>' for end of tag\n"); lexer->errors++;; } }