<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[n&#x27; format specifier disabled (bei printf)]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich schreibe gerade ein Programm das eine Verbindung zu einem Server im Internet herstellt und Quellcodes von Webseiten downloaden und analysieren soll. Um den erhaltenen HTML-Code über die Standardaugabe anzuzeigen bzw. zu speichern benutze ich die Funktion printf().</p>
<p>Das Programm bis jetzt bei einer einzigen Webseite die ich fand: <a href="http://www.mathematik.uni-ulm.de/sai/ss02/soft/blatt7/http.html" rel="nofollow">http://www.mathematik.uni-ulm.de/sai/ss02/soft/blatt7/http.html</a> . Sie ist... etwas schlicht. ^^</p>
<p>Bei komplexen Seiten wie Wikipedia scheitert das Programm. Ich bekomme eine 4xx Fehlermeldung. Das schlimme ist daran, dass die gelierferten Daten diese <strong>Format Spezifizierer</strong> enthalten. Während des Ausführens taucht also folgender Fehlerdialog auf:</p>
<p>Microsoft Visual C++ Debug Library<br />
Debug Assertion Failed!<br />
....<br />
Expression(&quot;n' spezifier disabled', 0)<br />
....</p>
<p>Soweit ich das gelesen hab kann es ein Sicherheitsrisiko sein diese Format Spezifizierer zuzulassen. Jetzt wollte ich von euch wissen:</p>
<ol>
<li>Ist das wirklich ein Sicherheitsrisiko?</li>
<li>Was ist die einfachste Alternative zu printf() um die Daten anzuzeigen/zu speichern?</li>
</ol>
<p>Im Endeffekt will ich die Daten ja noch nicht mal speicher/anzeigen, sondern nur nach bestimmten Mustern parsen.</p>
<ol start="3">
<li>Wäre es dazu sinnvoll den mehrmals gefüllten Buffer zu einer Zeichenkette zusammenzuhängen in der ich dann suchen kann?</li>
<li>Vielleicht weiß jemand wie Browser mit diesen Spezifizierern im Quellcode umgehen?</li>
</ol>
<p>MfG Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268084/n-format-specifier-disabled-bei-printf</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 03:07:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268084.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jun 2010 20:45:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to n&#x27; format specifier disabled (bei printf) on Thu, 03 Jun 2010 20:46:08 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich schreibe gerade ein Programm das eine Verbindung zu einem Server im Internet herstellt und Quellcodes von Webseiten downloaden und analysieren soll. Um den erhaltenen HTML-Code über die Standardaugabe anzuzeigen bzw. zu speichern benutze ich die Funktion printf().</p>
<p>Das Programm bis jetzt bei einer einzigen Webseite die ich fand: <a href="http://www.mathematik.uni-ulm.de/sai/ss02/soft/blatt7/http.html" rel="nofollow">http://www.mathematik.uni-ulm.de/sai/ss02/soft/blatt7/http.html</a> . Sie ist... etwas schlicht. ^^</p>
<p>Bei komplexen Seiten wie Wikipedia scheitert das Programm. Ich bekomme eine 4xx Fehlermeldung. Das schlimme ist daran, dass die gelierferten Daten diese <strong>Format Spezifizierer</strong> enthalten. Während des Ausführens taucht also folgender Fehlerdialog auf:</p>
<p>Microsoft Visual C++ Debug Library<br />
Debug Assertion Failed!<br />
....<br />
Expression(&quot;n' spezifier disabled', 0)<br />
....</p>
<p>Soweit ich das gelesen hab kann es ein Sicherheitsrisiko sein diese Format Spezifizierer zuzulassen. Jetzt wollte ich von euch wissen:</p>
<ol>
<li>Ist das wirklich ein Sicherheitsrisiko?</li>
<li>Was ist die einfachste Alternative zu printf() um die Daten anzuzeigen/zu speichern?</li>
</ol>
<p>Im Endeffekt will ich die Daten ja noch nicht mal speicher/anzeigen, sondern nur nach bestimmten Mustern parsen.</p>
<ol start="3">
<li>Wäre es dazu sinnvoll den mehrmals gefüllten Buffer zu einer Zeichenkette zusammenzuhängen in der ich dann suchen kann?</li>
<li>Vielleicht weiß jemand wie Browser mit diesen Spezifizierern im Quellcode umgehen?</li>
</ol>
<p>MfG Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906529</guid><dc:creator><![CDATA[Tobi.]]></dc:creator><pubDate>Thu, 03 Jun 2010 20:46:08 GMT</pubDate></item><item><title><![CDATA[Reply to n&#x27; format specifier disabled (bei printf) on Thu, 03 Jun 2010 20:59:49 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig lese, geht es dabei nicht um irgendwelche Teile der HTML-Daten, sondern darum, dass der verarbeitende Code %n in einem printf-Format-String benutzt. Mit dem kann man die Anzahl der bisher ausgegebenen Zeichen speichern; inwiefern das ein Sicherheitsrisiko ist, ist für ich allerdings nicht direkt offensichtlich. Welche Gründe gab denn die Quelle, die das als Sicherheitsrisiko bezeichnete?</p>
<p>Wie dem auch sei, in C++ ist es üblich, Ausgaben über Stream-Objekte zu betreiben. Im Fall von Konsolenausgaben ist das meistens std::cout, etwa</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main() {
  std::cout &lt;&lt; &quot;Hallo, Welt!&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Beim Parsen hilft dir das aber natürlich herzlich wenig. Je nach Komplexität des Parsers bieten sich mehrere Möglichkeiten an; ich an deiner Stelle würde mich in den <a href="http://www.boost.org" rel="nofollow">Boost-Bibliotheken</a> umsehen, speziell <a href="http://www.boost.org/doc/libs/1_43_0/libs/regex/doc/html/index.html" rel="nofollow">Boost.Regex</a>, <a href="http://www.boost.org/doc/libs/1_43_0/doc/html/xpressive.html" rel="nofollow">Boost.Xpressive</a> und <a href="http://www.boost.org/doc/libs/1_43_0/libs/spirit/doc/html/index.html" rel="nofollow">Boost.Spirit</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906532</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 03 Jun 2010 20:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to n&#x27; format specifier disabled (bei printf) on Thu, 03 Jun 2010 21:09:28 GMT]]></title><description><![CDATA[<p>Hier ist der Artikel mit der Überschrift &quot;Do Not Use the &quot;%n&quot; Format String Specifier&quot;: <a href="https://buildsecurityin.us-cert.gov/bsi/articles/knowledge/guidelines/340-BSI.html" rel="nofollow">https://buildsecurityin.us-cert.gov/bsi/articles/knowledge/guidelines/340-BSI.html</a></p>
<p>Aber wenn das nicht riskant ist, lasse ich die einfach zu.</p>
<p>Eigentlich möchte ich möglichst wenige Bibliotheken einbauen. Für mich kamen zwei Möglichkeiten in Frage:</p>
<p>1. Die Inhalte des Buffers aneinanderhängen und darin suchen.<br />
2. Die Inhalte in eine Textdatei speichern mit der ich arbeite. Aber so groß sind HTML-Dateien ja eigentlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906535</guid><dc:creator><![CDATA[Tobi.]]></dc:creator><pubDate>Thu, 03 Jun 2010 21:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to n&#x27; format specifier disabled (bei printf) on Fri, 04 Jun 2010 04:16:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">printf(&quot;%s&quot;, buffer);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1906566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906566</guid><dc:creator><![CDATA[oO]]></dc:creator><pubDate>Fri, 04 Jun 2010 04:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to n&#x27; format specifier disabled (bei printf) on Fri, 04 Jun 2010 06:32:09 GMT]]></title><description><![CDATA[<p>Ich bin verblüfft...</p>
<p>Ich dachte erst &quot;Schon klar. Ich weiß was Formatspezifizierer wie %d und %s sind...&quot;. Aber genau dieses kurze Kommando rettet meinen Code. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Bisher hatte ich zur Ausgabe printf(recvData) benutzt.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906582</guid><dc:creator><![CDATA[Tobi.]]></dc:creator><pubDate>Fri, 04 Jun 2010 06:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to n&#x27; format specifier disabled (bei printf) on Fri, 04 Jun 2010 18:44:33 GMT]]></title><description><![CDATA[<p>In C++ nutzt man dafür std::cout. Damit wäre der Fehler gar nicht aufgetreten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906953</guid><dc:creator><![CDATA[lklkl]]></dc:creator><pubDate>Fri, 04 Jun 2010 18:44:33 GMT</pubDate></item></channel></rss>