]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- handle optional carriage returns
authorArvin Schnell <aschnell@suse.de>
Mon, 8 Jul 2024 09:43:07 +0000 (11:43 +0200)
committerArvin Schnell <aschnell@suse.de>
Mon, 8 Jul 2024 09:43:07 +0000 (11:43 +0200)
stomp/Stomp.cc
stomp/Stomp.h
stomp/testsuite/read1.cc
stomp/testsuite/strip.cc [new file with mode: 0644]

index ebdd2af9f84dd660d247da8203144d2d98855e5c..6da1827bcff8266e5a58cdb333ab6f56a2197116 100644 (file)
@@ -48,6 +48,7 @@ namespace Stomp
        {
            string line;
            getline(is, line);
+           line = strip_cr(line);
 
            if (state == State::Start)
            {
@@ -150,6 +151,18 @@ namespace Stomp
     }
 
 
+    std::string
+    strip_cr(const std::string& in)
+    {
+       string::size_type length = in.size();
+
+       if (length > 0 && in[length - 1] == '\r')
+           return in.substr(0, length - 1);
+
+       return in;
+    }
+
+
     std::string
     escape_header(const std::string& in)
     {
index 2220d8dce71922bbdaf1441e86b0e0531cddf9a9..1a024da6345d58351ca7d2b608b06f05f9cc7de1 100644 (file)
@@ -51,6 +51,8 @@ namespace Stomp
     Message ack();
     Message nack();
 
+    std::string strip_cr(const std::string& in);
+
     std::string escape_header(const std::string& in);
     std::string unescape_header(const std::string& in);
 
index 916ea0f820dbececba50f9adefe2a6cc43518835..a5c31eb4ab090aa31c4ab661a7cbf02503cea6a2 100644 (file)
@@ -55,6 +55,24 @@ BOOST_AUTO_TEST_CASE(test2)
 }
 
 
+BOOST_AUTO_TEST_CASE(cr1)
+{
+    // optional carriage returns
+
+    istringstream s1("HELLO\r\nkey:value\r\n\r\nWORLD" + null);
+    istream s2(s1.rdbuf());
+
+    Message msg = read_message(s2);
+
+    BOOST_CHECK_EQUAL(msg.command, "HELLO");
+
+    BOOST_CHECK_EQUAL(msg.headers.size(), 1);
+    BOOST_CHECK_EQUAL(msg.headers["key"], "value");
+
+    BOOST_CHECK_EQUAL(msg.body, "WORLD");
+}
+
+
 BOOST_AUTO_TEST_CASE(escape1)
 {
     // special characters in header
diff --git a/stomp/testsuite/strip.cc b/stomp/testsuite/strip.cc
new file mode 100644 (file)
index 0000000..685a285
--- /dev/null
@@ -0,0 +1,19 @@
+
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE snapper
+
+#include <boost/test/unit_test.hpp>
+
+#include "../Stomp.h"
+
+
+using namespace std;
+using namespace Stomp;
+
+
+BOOST_AUTO_TEST_CASE(cr)
+{
+    BOOST_CHECK_EQUAL(Stomp::strip_cr("hello"), "hello");
+    BOOST_CHECK_EQUAL(Stomp::strip_cr("hello\r"), "hello");
+    BOOST_CHECK_EQUAL(Stomp::strip_cr("hello\r\n"), "hello\r\n");
+}