diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-10-22 03:18:24 -0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-10-22 03:18:24 -0200 |
commit | 066280cf99c575702ab771e1b0f5319d9c3fcde1 (patch) | |
tree | 13f5893de3258654085b1e58dac8f339d370e8c8 | |
parent | 908fc8266ef81f80964be710dd5a15dbdb86500f (diff) | |
download | blogc-066280cf99c575702ab771e1b0f5319d9c3fcde1.tar.gz blogc-066280cf99c575702ab771e1b0f5319d9c3fcde1.tar.bz2 blogc-066280cf99c575702ab771e1b0f5319d9c3fcde1.zip |
source-parser: handle \r\n line endings properly
-rw-r--r-- | src/source-parser.c | 2 | ||||
-rw-r--r-- | tests/check_source_parser.c | 32 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/source-parser.c b/src/source-parser.c index aee5c23..db0792c 100644 --- a/src/source-parser.c +++ b/src/source-parser.c @@ -144,6 +144,8 @@ blogc_source_parse(const char *src, size_t src_len, blogc_error_t **err) break; case SOURCE_CONTENT_START: + if (c == '\n' || c == '\r') + break; start = current; state = SOURCE_CONTENT; break; diff --git a/tests/check_source_parser.c b/tests/check_source_parser.c index 145ba30..810786b 100644 --- a/tests/check_source_parser.c +++ b/tests/check_source_parser.c @@ -52,6 +52,37 @@ test_source_parse(void **state) static void +test_source_parse_crlf(void **state) +{ + const char *a = + "VAR1: asd asd\r\n" + "VAR2: 123chunda\r\n" + "----------\r\n" + "# This is a test\r\n" + "\r\n" + "bola\r\n"; + blogc_error_t *err = NULL; + b_trie_t *source = blogc_source_parse(a, strlen(a), &err); + assert_null(err); + assert_non_null(source); + assert_int_equal(b_trie_size(source), 5); + assert_string_equal(b_trie_lookup(source, "VAR1"), "asd asd"); + assert_string_equal(b_trie_lookup(source, "VAR2"), "123chunda"); + assert_string_equal(b_trie_lookup(source, "EXCERPT"), + "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n" + "<p>bola</p>\r\n"); + assert_string_equal(b_trie_lookup(source, "CONTENT"), + "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n" + "<p>bola</p>\r\n"); + assert_string_equal(b_trie_lookup(source, "RAW_CONTENT"), + "# This is a test\r\n" + "\r\n" + "bola\r\n"); + b_trie_free(source); +} + + +static void test_source_parse_with_spaces(void **state) { const char *a = @@ -446,6 +477,7 @@ main(void) { const UnitTest tests[] = { unit_test(test_source_parse), + unit_test(test_source_parse_crlf), unit_test(test_source_parse_with_spaces), unit_test(test_source_parse_with_excerpt), unit_test(test_source_parse_config_empty), |