@@ -418,6 +418,117 @@ void OscapScannerBase::readStdOut(QProcess& process)
418418 while (tryToReadStdOutChar (process));
419419}
420420
421+
422+ void OscapScannerBase::emitMessage (MessageType kind, QString& message)
423+ {
424+ QString rawMessage = QObject::tr (message.toUtf8 ().constData ());
425+ switch (kind)
426+ {
427+ case MSG_INFO:
428+ {
429+ emit infoMessage (message);
430+ break ;
431+ }
432+ case MSG_WARNING:
433+ {
434+ emit warningMessage (message);
435+ break ;
436+ }
437+ default :
438+ emit errorMessage (message);
439+ }
440+ }
441+
442+
443+ void OscapScannerBase::selectWarning (MessageType& kind, const QString& message)
444+ {
445+ if (message.contains (" WARNING: " ))
446+ {
447+ kind = MSG_WARNING;
448+ }
449+ if (message.contains (QRegExp (" ^W:\\ s" )))
450+ {
451+ kind = MSG_WARNING;
452+ }
453+ }
454+
455+
456+ void OscapScannerBase::processWarning (QString& message)
457+ {
458+ message = guiFriendlyMessage (message);
459+ }
460+
461+
462+ void OscapScannerBase::selectInfo (MessageType& kind, const QString& message)
463+ {
464+ if (message.contains (QRegExp (" ^Downloading: .+ \\ .{3} \\ w+\\ n" )))
465+ {
466+ kind = MSG_INFO;
467+ }
468+ }
469+
470+
471+ void OscapScannerBase::processInfo (QString& message)
472+ {
473+ (void )message; // suppress the unused arg warning
474+ }
475+
476+
477+ void OscapScannerBase::selectError (MessageType& kind, const QString& message)
478+ {
479+ if (message.contains (QRegExp (" ^E:\\ s" )))
480+ {
481+ kind = MSG_ERROR;
482+ }
483+ }
484+
485+
486+ void OscapScannerBase::processError (QString& message)
487+ {
488+ message.remove (QRegExp (" Error:\\ s*" ));
489+ message.remove (QRegExp (" ^E:\\ s*" ));
490+ message.remove (QRegExp (" \\ n" ));
491+ }
492+
493+
494+ void OscapScannerBase::processUnknown (QString& message)
495+ {
496+ message = QString (" The 'oscap' process has written the following content to stderr:\n %1" ).arg (message);
497+ }
498+
499+
500+ void OscapScannerBase::filterStdErr (QString& errorText)
501+ {
502+ MessageType type = MSG_UNKNOWN;
503+ // let detection of a more severe type of message (error) overrule a benign one (info)
504+ selectInfo (type, errorText);
505+ selectWarning (type, errorText);
506+ selectError (type, errorText);
507+ switch (type)
508+ {
509+ case MSG_INFO:
510+ {
511+ processInfo (errorText);
512+ break ;
513+ }
514+ case MSG_WARNING:
515+ {
516+ processWarning (errorText);
517+ break ;
518+ }
519+ case MSG_ERROR:
520+ {
521+ processError (errorText);
522+ break ;
523+ }
524+ default :
525+ {
526+ processUnknown (errorText);
527+ }
528+ }
529+ emitMessage (type, errorText);
530+ }
531+
421532void OscapScannerBase::watchStdErr (QProcess& process)
422533{
423534 process.setReadChannel (QProcess::StandardError);
@@ -433,21 +544,7 @@ void OscapScannerBase::watchStdErr(QProcess& process)
433544
434545 if (!stdErrOutput.isEmpty ())
435546 {
436- if (stdErrOutput.contains (" WARNING: " ))
437- {
438- QString guiMessage = guiFriendlyMessage (stdErrOutput);
439- emit warningMessage (QObject::tr (guiMessage.toUtf8 ().constData ()));
440- }
441- // Openscap >= 1.2.11 (60fb9f0c98eee) sends this message through stderr
442- else if (stdErrOutput.contains (QRegExp (" ^Downloading: .+ \\ .{3} \\ w+\\ n" )))
443- {
444- emit infoMessage (stdErrOutput);
445- }
446- else
447- {
448- emit errorMessage (QObject::tr (" The 'oscap' process has written the following content to stderr:\n "
449- " %1" ).arg (stdErrOutput));
450- }
547+ filterStdErr (stdErrOutput);
451548 }
452549
453550 }
@@ -458,8 +555,9 @@ QString OscapScannerBase::guiFriendlyMessage(const QString& cliMessage)
458555{
459556 QString guiMessage = cliMessage;
460557
461- // Remove "WARNING:" prefix and trailing \n
462- guiMessage.remove (QRegExp (" (WARNING: )|\n " ));
558+ guiMessage.remove (QRegExp (" WARNING:\\ s*" ));
559+ guiMessage.remove (QRegExp (" ^W:\\ s*" ));
560+ guiMessage.remove (QRegExp (" \\ n" ));
463561
464562 if (cliMessage.contains (" --fetch-remote-resources" ))
465563 guiMessage = QString (" Remote resources might be necessary for this profile to work properly. Please select \" Fetch remote resources\" for complete scan" );
0 commit comments