Release v0.1.6.4 prepare for release

This commit is contained in:
Markus committed 2025-08-29 12:48:39 +02:00
1 parent 5a6e8707bb
commit 84c7b9962a
9 files changed
+17 -12

No files matched your search

@@ -1,3 +1,3 @@
test_basic 14 0.474679
test_basic 15 0.446662
example_run 0 0
---
@@ -1 +1 @@
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:44</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\base58.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;base58.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;algorithm&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;stdexcept&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre>const std::string Base58::ALPHABET = &quot;123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz&quot;;</pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>std::string Base58::encode(const std::vector&lt;unsigned char&gt;&amp; data) <span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> if (</span><span class='region red'>data.empty()</span><span class='region red'>) </span><span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> return &quot;&quot;;</span></pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> }</span><span class='red'></span></pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='skipped-line'></td><td class='code'><pre> // Skip leading zeros</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre> <span class='region red'>size_t leading_zeros = 0;</span></pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> while (</span><span class='region red'>leading_zeros &lt; data.size()</span><span class='region red'> &amp;&amp; </span><span class='region red'>data[leading_zeros] == 0</span><span class='region red'>) </span><span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> leading_zeros++;</span></pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> }</span><span class='red'></span></pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='skipped-line'></td><td class='code'><pre> // Convert to base58<span class='red'></span></pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> size_t digits_size = (data.size() - leading_zeros) * 138 / 100 + 1;</span></pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> std::vector&lt;unsigned chaLine truncated
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:48</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\base58.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;base58.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;algorithm&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;stdexcept&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre>const std::string Base58::ALPHABET = &quot;123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz&quot;;</pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>std::string Base58::encode(const std::vector&lt;unsigned char&gt;&amp; data) <span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> if (</span><span class='region red'>data.empty()</span><span class='region red'>) </span><span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> return &quot;&quot;;</span></pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> }</span><span class='red'></span></pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='skipped-line'></td><td class='code'><pre> // Skip leading zeros</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre> <span class='region red'>size_t leading_zeros = 0;</span></pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> while (</span><span class='region red'>leading_zeros &lt; data.size()</span><span class='region red'> &amp;&amp; </span><span class='region red'>data[leading_zeros] == 0</span><span class='region red'>) </span><span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> leading_zeros++;</span></pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> }</span><span class='red'></span></pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='skipped-line'></td><td class='code'><pre> // Convert to base58<span class='red'></span></pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> size_t digits_size = (data.size() - leading_zeros) * 138 / 100 + 1;</span></pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> std::vector&lt;unsigned chaLine truncated
@@ -1 +1 @@
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:44</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\crypto.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;crypto.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;random&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;stdexcept&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cstring&gt;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Crypto++ includes</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/cryptlib.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/osrng.h&gt; // AutoSeededRandomPool</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/aes.h&gt; // AES encryption</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/gcm.h&gt; // GCM mode</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/pwdbased.h&gt; // PBKDF2</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/sha.h&gt; // SHA256</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/zlib.h&gt; // Zlib compression</pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='skipped-line'></td><td class='code'><pre>using namespace CryptoPP;</pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>std::vector&lt;unsigned char&gt; Crypto::generate_key(size_t length) {</pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> std::vector&lt;unsigned char&gt; key(length);</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='skipped-line'></td><td class='code'><pre> // Use Crypto++ AutoSeededRandomPool for cryptographically secure random numbers</pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> AutoSeededRandomPool rng;</pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> rng.GenerateBlock(key.data(), length);</pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L24' href='#L24'><pre>24</pre></a></td><td class='covered-line'><pre>3</pre></td><tdLine truncated
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:48</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\crypto.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;crypto.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;random&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;stdexcept&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cstring&gt;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Crypto++ includes</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/cryptlib.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/osrng.h&gt; // AutoSeededRandomPool</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/aes.h&gt; // AES encryption</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/gcm.h&gt; // GCM mode</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/pwdbased.h&gt; // PBKDF2</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/sha.h&gt; // SHA256</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/zlib.h&gt; // Zlib compression</pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='skipped-line'></td><td class='code'><pre>using namespace CryptoPP;</pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>std::vector&lt;unsigned char&gt; Crypto::generate_key(size_t length) {</pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> std::vector&lt;unsigned char&gt; key(length);</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='skipped-line'></td><td class='code'><pre> // Use Crypto++ AutoSeededRandomPool for cryptographically secure random numbers</pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> AutoSeededRandomPool rng;</pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> rng.GenerateBlock(key.data(), length);</pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='skipped-line'></td><td class='code'><pre> </pre></td></tr><tr><td class='line-number'><a name='L24' href='#L24'><pre>24</pre></a></td><td class='covered-line'><pre>3</pre></td><tdLine truncated
@@ -1 +1 @@
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:44</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\http_client.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;http_client.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;iostream&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;string&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;sstream&gt;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#ifdef WINDOWS</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;windows.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;winhttp.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#pragma comment(lib, &quot;winhttp.lib&quot;)</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>static std::string last_winhttp_error(const char* where) {</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> DWORD err = GetLastError();</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> LPVOID lpMsgBuf = nullptr;</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> FormatMessageA(</pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,</pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> NULL,</pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> err,</pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),</pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> (LPSTR)&amp;lpMsgBuf,</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> 0, NULL);</pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> std::ostringstream os;</pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> os &lt;&lt; &quot;[WinHTTP] &quot; &lt;&lt; where &lt;&lt; &quot; failed, error=&quot; &lt;&lt; err;</pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> if (lpMsgBuf) <span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> os &lt;Line truncated
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:48</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\http_client.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;http_client.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;iostream&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;string&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;sstream&gt;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#ifdef WINDOWS</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;windows.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;winhttp.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#pragma comment(lib, &quot;winhttp.lib&quot;)</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>static std::string last_winhttp_error(const char* where) {</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> DWORD err = GetLastError();</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> LPVOID lpMsgBuf = nullptr;</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> FormatMessageA(</pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,</pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> NULL,</pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> err,</pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),</pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> (LPSTR)&amp;lpMsgBuf,</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> 0, NULL);</pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> std::ostringstream os;</pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> os &lt;&lt; &quot;[WinHTTP] &quot; &lt;&lt; where &lt;&lt; &quot; failed, error=&quot; &lt;&lt; err;</pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> if (lpMsgBuf) <span class='region red'>{</span></pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre><span class='region red'> os &lt;Line truncated
@@ -1 +1 @@
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:44</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\json_parser.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;json_parser.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;iostream&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;chrono&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/base64.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/filters.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/queue.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Helper: Base64 encode without line breaks</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre>static std::string encode_base64(const std::vector&lt;unsigned char&gt;&amp; data) {</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> std::string result;</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> CryptoPP::StringSource ss(</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> data.data(), data.size(), true,</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> new CryptoPP::Base64Encoder(new CryptoPP::StringSink(result), false /* insertLineBreaks */)</pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> );</pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> return result;</pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre>}</pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Helper: Base64 decode</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>static std::vector&lt;unsigned char&gt; decode_base64(const std::string&amp; b64) {</pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> std::string decoded;</pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> CryptoPP::StringSource ss(</pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> b64, true, new CryptoPP::Base64Decoder(new CryptoPP::StringSink(decoded))</pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> );</pre></td></tr><tr><td class='lineLine truncated
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:48</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\json_parser.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;json_parser.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;iostream&gt;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;chrono&gt;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/base64.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/filters.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cryptopp/queue.h&gt;</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Helper: Base64 encode without line breaks</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre>static std::string encode_base64(const std::vector&lt;unsigned char&gt;&amp; data) {</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> std::string result;</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> CryptoPP::StringSource ss(</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> data.data(), data.size(), true,</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> new CryptoPP::Base64Encoder(new CryptoPP::StringSink(result), false /* insertLineBreaks */)</pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> );</pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre> return result;</pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='covered-line'><pre>6</pre></td><td class='code'><pre>}</pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Helper: Base64 decode</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>static std::vector&lt;unsigned char&gt; decode_base64(const std::string&amp; b64) {</pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> std::string decoded;</pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> CryptoPP::StringSource ss(</pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> b64, true, new CryptoPP::Base64Decoder(new CryptoPP::StringSink(decoded))</pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre> );</pre></td></tr><tr><td class='lineLine truncated
@@ -1 +1 @@
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:44</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\privatebinapi.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;privatebinapi.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;http_client.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;crypto.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;json_parser.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;base58.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;string&gt;</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;vector&gt;</pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cstring&gt;</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cstdlib&gt;</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;iostream&gt;</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;fstream&gt;</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;sstream&gt;</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#define PRIVATEBIN_API_VERSION &quot;1.3&quot;</pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Error codes</pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_SUCCESS <span class='region red'>0</span></pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>#define ERROR_NETWORK 1</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_CRYPTO <span class='region red'>2</span></pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_INVALID_INPUT <span class='region red'>3</span></pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_SERVER <span class='region red'>4</span></pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_JSON_PARSE <span class='region red'>5</span></pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L24' href='#L24'><pre>24</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Helper function to copy string to output pLine truncated
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='..\..\..\..\..\..\..\style.css'><script src='..\..\..\..\..\..\..\control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:48</h4><span class='control'><a href='javascript:next_line()'>next uncovered line (L)</a>, <a href='javascript:next_region()'>next uncovered region (R)</a>, <a href='javascript:next_branch()'>next uncovered branch (B)</a></span><div class='centered'><table><div class='source-name-title'><pre>C:\Users\mbusc\source\repos\privatebin-cpp\src\privatebinapi.cpp</pre></div><tr><td><pre>Line</pre></td><td><pre>Count</pre></td><td><pre>Source</pre></td></tr><tr><td class='line-number'><a name='L1' href='#L1'><pre>1</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;privatebinapi.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L2' href='#L2'><pre>2</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;http_client.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L3' href='#L3'><pre>3</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;crypto.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L4' href='#L4'><pre>4</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;json_parser.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L5' href='#L5'><pre>5</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &quot;base58.h&quot;</pre></td></tr><tr><td class='line-number'><a name='L6' href='#L6'><pre>6</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;string&gt;</pre></td></tr><tr><td class='line-number'><a name='L7' href='#L7'><pre>7</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;vector&gt;</pre></td></tr><tr><td class='line-number'><a name='L8' href='#L8'><pre>8</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cstring&gt;</pre></td></tr><tr><td class='line-number'><a name='L9' href='#L9'><pre>9</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;cstdlib&gt;</pre></td></tr><tr><td class='line-number'><a name='L10' href='#L10'><pre>10</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;iostream&gt;</pre></td></tr><tr><td class='line-number'><a name='L11' href='#L11'><pre>11</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;fstream&gt;</pre></td></tr><tr><td class='line-number'><a name='L12' href='#L12'><pre>12</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#include &lt;sstream&gt;</pre></td></tr><tr><td class='line-number'><a name='L13' href='#L13'><pre>13</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L14' href='#L14'><pre>14</pre></a></td><td class='skipped-line'></td><td class='code'><pre>#define PRIVATEBIN_API_VERSION &quot;1.3&quot;</pre></td></tr><tr><td class='line-number'><a name='L15' href='#L15'><pre>15</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L16' href='#L16'><pre>16</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Error codes</pre></td></tr><tr><td class='line-number'><a name='L17' href='#L17'><pre>17</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_SUCCESS <span class='region red'>0</span></pre></td></tr><tr><td class='line-number'><a name='L18' href='#L18'><pre>18</pre></a></td><td class='covered-line'><pre>3</pre></td><td class='code'><pre>#define ERROR_NETWORK 1</pre></td></tr><tr><td class='line-number'><a name='L19' href='#L19'><pre>19</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_CRYPTO <span class='region red'>2</span></pre></td></tr><tr><td class='line-number'><a name='L20' href='#L20'><pre>20</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_INVALID_INPUT <span class='region red'>3</span></pre></td></tr><tr><td class='line-number'><a name='L21' href='#L21'><pre>21</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_SERVER <span class='region red'>4</span></pre></td></tr><tr><td class='line-number'><a name='L22' href='#L22'><pre>22</pre></a></td><td class='uncovered-line'><pre>0</pre></td><td class='code'><pre>#define ERROR_JSON_PARSE <span class='region red'>5</span></pre></td></tr><tr><td class='line-number'><a name='L23' href='#L23'><pre>23</pre></a></td><td class='skipped-line'></td><td class='code'><pre></pre></td></tr><tr><td class='line-number'><a name='L24' href='#L24'><pre>24</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// Helper function to copy string to output pLine truncated
+1 -1
View File
@@ -1 +1 @@
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='style.css'><script src='control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:44</h4><p>Click <a href='http://clang.llvm.org/docs/SourceBasedCodeCoverage.html#interpreting-reports'>here</a> for information about interpreting this report.</p><div class='centered'><table><tr><td class='column-entry-bold'>Filename</td><td class='column-entry-bold'>Function Coverage</td><td class='column-entry-bold'>Line Coverage</td><td class='column-entry-bold'>Region Coverage</td><td class='column-entry-bold'>Branch Coverage</td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\base58.cpp.html'>base58.cpp</a></pre></td><td class='column-entry-red'><pre> 0.00% (0/2)</pre></td><td class='column-entry-red'><pre> 0.00% (0/67)</pre></td><td class='column-entry-red'><pre> 0.00% (0/48)</pre></td><td class='column-entry-red'><pre> 0.00% (0/34)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\crypto.cpp.html'>crypto.cpp</a></pre></td><td class='column-entry-red'><pre> 66.67% (4/6)</pre></td><td class='column-entry-red'><pre> 56.19% (59/105)</pre></td><td class='column-entry-red'><pre> 36.84% (7/19)</pre></td><td class='column-entry-red'><pre> 0.00% (0/2)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\http_client.cpp.html'>http_client.cpp</a></pre></td><td class='column-entry-green'><pre> 100.00% (5/5)</pre></td><td class='column-entry-red'><pre> 51.67% (186/360)</pre></td><td class='column-entry-red'><pre> 66.67% (170/255)</pre></td><td class='column-entry-red'><pre> 41.38% (48/116)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\json_parser.cpp.html'>json_parser.cpp</a></pre></td><td class='column-entry-green'><pre> 100.00% (5/5)</pre></td><td class='column-entry-yellow'><pre> 84.21% (80/95)</pre></td><td class='column-entry-red'><pre> 71.88% (23/32)</pre></td><td class='column-entry-red'><pre> 50.00% (7/14)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\privatebinapi.cpp.html'>privatebinapi.cpp</a></pre></td><td class='column-entry-red'><pre> 50.00% (3/6)</pre></td><td class='column-entry-red'><pre> 27.01% (57/211)</pre></td><td class='column-entry-red'><pre> 28.15% (38/135)</pre></td><td class='column-entry-red'><pre> 21.43% (15/70)</pre></td></tr><tr class='light-row-bold'><td><pre>Totals</pre></td><td class='column-entry-red'><pre> 70.83% (17/24)</pre></td><td class='column-entry-red'><pre> 45.58% (382/838)</pre></td><td class='column-entry-red'><pre> 48.67% (238/489)</pre></td><td class='column-entry-red'><pre> 29.66% (70/236)</pre></td></tr></table></div><h5>Generated by llvm-cov -- llvm version 21.1.0</h5></body></html>
<!doctype html><html><head><meta name='viewport' content='width=device-width,initial-scale=1'><meta charset='UTF-8'><link rel='stylesheet' type='text/css' href='style.css'><script src='control.js'></script></head><body><h2>Coverage Report</h2><h4>Created: 2025-08-29 12:48</h4><p>Click <a href='http://clang.llvm.org/docs/SourceBasedCodeCoverage.html#interpreting-reports'>here</a> for information about interpreting this report.</p><div class='centered'><table><tr><td class='column-entry-bold'>Filename</td><td class='column-entry-bold'>Function Coverage</td><td class='column-entry-bold'>Line Coverage</td><td class='column-entry-bold'>Region Coverage</td><td class='column-entry-bold'>Branch Coverage</td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\base58.cpp.html'>base58.cpp</a></pre></td><td class='column-entry-red'><pre> 0.00% (0/2)</pre></td><td class='column-entry-red'><pre> 0.00% (0/67)</pre></td><td class='column-entry-red'><pre> 0.00% (0/48)</pre></td><td class='column-entry-red'><pre> 0.00% (0/34)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\crypto.cpp.html'>crypto.cpp</a></pre></td><td class='column-entry-red'><pre> 66.67% (4/6)</pre></td><td class='column-entry-red'><pre> 56.19% (59/105)</pre></td><td class='column-entry-red'><pre> 36.84% (7/19)</pre></td><td class='column-entry-red'><pre> 0.00% (0/2)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\http_client.cpp.html'>http_client.cpp</a></pre></td><td class='column-entry-green'><pre> 100.00% (5/5)</pre></td><td class='column-entry-red'><pre> 51.67% (186/360)</pre></td><td class='column-entry-red'><pre> 66.67% (170/255)</pre></td><td class='column-entry-red'><pre> 41.38% (48/116)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\json_parser.cpp.html'>json_parser.cpp</a></pre></td><td class='column-entry-green'><pre> 100.00% (5/5)</pre></td><td class='column-entry-yellow'><pre> 84.21% (80/95)</pre></td><td class='column-entry-red'><pre> 71.88% (23/32)</pre></td><td class='column-entry-red'><pre> 50.00% (7/14)</pre></td></tr><tr class='light-row'><td><pre><a href='coverage\Users\mbusc\source\repos\privatebin-cpp\src\privatebinapi.cpp.html'>privatebinapi.cpp</a></pre></td><td class='column-entry-red'><pre> 50.00% (3/6)</pre></td><td class='column-entry-red'><pre> 27.01% (57/211)</pre></td><td class='column-entry-red'><pre> 28.15% (38/135)</pre></td><td class='column-entry-red'><pre> 21.43% (15/70)</pre></td></tr><tr class='light-row-bold'><td><pre>Totals</pre></td><td class='column-entry-red'><pre> 70.83% (17/24)</pre></td><td class='column-entry-red'><pre> 45.58% (382/838)</pre></td><td class='column-entry-red'><pre> 48.67% (238/489)</pre></td><td class='column-entry-red'><pre> 29.66% (70/236)</pre></td></tr></table></div><h5>Generated by llvm-cov -- llvm version 21.1.0</h5></body></html>
Binary file not shown.
+10 -5
View File
@@ -8,7 +8,7 @@ if (-not $Token) {
$Token = $env:GITEA_TOKEN
if (-not $Token) {
Write-Host "Fehler: Kein Token angegeben und GITEA_TOKEN Umgebungsvariable nicht gesetzt!" -ForegroundColor Red
Write-Host "Verwendung: .\create_release_simple.ps1 -Token 'your_token' oder setze GITEA_TOKEN Umgebungsvariable" -ForegroundColor Yellow
Write-Host "Verwendung: .\create_release.ps1 -Token 'your_token' oder setze GITEA_TOKEN Umgebungsvariable" -ForegroundColor Yellow
Write-Host "Das Script führt automatisch einen Build durch und lädt alle Artefakte hoch." -ForegroundColor Cyan
exit 1
}
@@ -25,15 +25,20 @@ if (-not $lastTag) {
Write-Host "Letzter Tag: $lastTag" -ForegroundColor Green
# Version parsen
# Version parsen und nächsten verfügbaren Tag finden
if ($lastTag -match "^v(\d+)\.(\d+)\.(\d+)(.*)$") {
$major = [int]$matches[1]
$minor = [int]$matches[2]
$patch = [int]$matches[3]
$suffix = $matches[4]
$newPatch = $patch + 1
$newVersion = "v$major.$minor.$newPatch$suffix"
# Finde den nächsten verfügbaren Patch-Level
$newPatch = $patch
do {
$newPatch++
$newVersion = "v$major.$minor.$newPatch$suffix"
$tagExists = git tag --list $newVersion 2>$null
} while ($tagExists)
Write-Host "Neue Version: $newVersion" -ForegroundColor Green
} else {
@@ -173,7 +178,7 @@ if (-not $remoteUrl) {
$firstRemote = $allRemotes[0]
$remoteUrl = git remote get-url $firstRemote 2>$null
$remoteName = $firstRemote
Write-Host "Verwende ersten verfügbaren Remote '$firstRemote': $remoteUrl" -ForegroundColor Yellow
Write-Host "Verwende ersten verfügbaren Remote '$firstRemote': $url" -ForegroundColor Yellow
}
}