diff options
| -rw-r--r-- | libhandlebars-check.patch | 996 | ||||
| -rw-r--r-- | libhandlebars-gcc10.patch | 21 | ||||
| -rw-r--r-- | libhandlebars.spec | 16 | 
3 files changed, 1031 insertions, 2 deletions
diff --git a/libhandlebars-check.patch b/libhandlebars-check.patch new file mode 100644 index 0000000..7780862 --- /dev/null +++ b/libhandlebars-check.patch @@ -0,0 +1,996 @@ +Adapted for 0.6.4 using upstream patch + + + +From e1b94ca3e4bfda19914230720e4f43a47114a850 Mon Sep 17 00:00:00 2001 +From: John Boehr <john@johnboehr.is> +Date: Tue, 10 Dec 2019 21:54:57 -0800 +Subject: [PATCH] Fix issue with newer versions of libcheck + +--- + tests/test_cache.c          | 16 ++++++++ + tests/test_opcode_printer.c | 28 +++++++++++--- + tests/test_opcodes.c        | 56 ++++++++++++++------------- + tests/test_string.c         | 76 +++++++++++++++++++++++++++++++++++++ + tests/test_token.c          | 36 +++++++++++------- + tests/test_value.c          |  4 ++ + 6 files changed, 170 insertions(+), 46 deletions(-) + +diff -up ./tests/test_cache.c.newcheck ./tests/test_cache.c +--- ./tests/test_cache.c.newcheck	2020-02-19 16:17:30.602476530 +0100 ++++ ./tests/test_cache.c	2020-02-19 16:18:51.212075794 +0100 +@@ -210,35 +210,44 @@ static void execute_reset_test(struct ha + } +  + START_TEST(test_simple_cache_gc) ++{ +     struct handlebars_cache * cache = handlebars_cache_simple_ctor(context); +     execute_gc_test(cache); +     handlebars_cache_dtor(cache); ++} + END_TEST +  + START_TEST(test_simple_cache_reset) ++{ +     struct handlebars_cache * cache = handlebars_cache_simple_ctor(context); +     execute_reset_test(cache); +     handlebars_cache_dtor(cache); ++} + END_TEST +  + #ifdef HAVE_LIBLMDB + START_TEST(test_lmdb_cache_gc) ++{ +     char tmp[256]; +     snprintf(tmp, 256, "%s/%s", getenv("TMPDIR") ?: "/tmp", "handlebars-lmdb-cache-test.mdb"); +     struct handlebars_cache * cache = handlebars_cache_lmdb_ctor(context, tmp); +     execute_gc_test(cache); +     handlebars_cache_dtor(cache); ++} + END_TEST +  + START_TEST(test_lmdb_cache_reset) ++{ +     char tmp[256]; +     snprintf(tmp, 256, "%s/%s", getenv("TMPDIR") ?: "/tmp", "handlebars-lmdb-cache-test.mdb"); +     struct handlebars_cache * cache = handlebars_cache_lmdb_ctor(context, tmp); +     execute_reset_test(cache); +     handlebars_cache_dtor(cache); ++} + END_TEST + #else + START_TEST(test_lmdb_cache_error) ++{ +     jmp_buf buf; +     char tmp[256]; +     snprintf(tmp, 256, "%s/%s", getenv("TMPDIR") ?: "/tmp", "handlebars-lmdb-cache-test.mdb"); +@@ -250,19 +259,24 @@ START_TEST(test_lmdb_cache_error) +  +     struct handlebars_cache * cache = handlebars_cache_lmdb_ctor(context, tmp); +     ck_assert(0); ++} + END_TEST + #endif +  + START_TEST(test_mmap_cache_gc) ++{ +     struct handlebars_cache * cache = handlebars_cache_mmap_ctor(context, 2097152, 2053); +     execute_gc_test(cache); +     handlebars_cache_dtor(cache); ++} + END_TEST +  + START_TEST(test_mmap_cache_reset) ++{ +     struct handlebars_cache * cache = handlebars_cache_mmap_ctor(context, 2097152, 2053); +     execute_gc_test(cache); +     handlebars_cache_dtor(cache); ++} + END_TEST +  + Suite * parser_suite(void) +diff -up ./tests/test_opcode_printer.c.newcheck ./tests/test_opcode_printer.c +--- ./tests/test_opcode_printer.c.newcheck	2017-07-18 03:21:21.000000000 +0200 ++++ ./tests/test_opcode_printer.c	2020-02-19 16:17:30.602476530 +0100 +@@ -38,6 +38,7 @@ +  +  + START_TEST(test_operand_print_append_null) ++{ +     struct handlebars_operand op; +     struct handlebars_string * string; +     handlebars_operand_set_null(&op); +@@ -45,9 +46,11 @@ START_TEST(test_operand_print_append_nul +     ck_assert_ptr_ne(NULL, string); +     ck_assert_str_eq("[NULL]", string->val); +     handlebars_talloc_free(string); ++} + END_TEST +  + START_TEST(test_operand_print_append_boolean) ++{ +     struct handlebars_operand op; +     struct handlebars_string * string; +     handlebars_operand_set_boolval(&op, 1); +@@ -55,9 +58,11 @@ START_TEST(test_operand_print_append_boo +     ck_assert_ptr_ne(NULL, string); +     ck_assert_str_eq("[BOOLEAN:1]", string->val); +     handlebars_talloc_free(string); ++} + END_TEST +  + START_TEST(test_operand_print_append_long) ++{ +     struct handlebars_operand op; +     struct handlebars_string * string; +     handlebars_operand_set_longval(&op, 2358); +@@ -65,9 +70,11 @@ START_TEST(test_operand_print_append_lon +     ck_assert_ptr_ne(NULL, string); +     ck_assert_str_eq("[LONG:2358]", string->val); +     handlebars_talloc_free(string); ++} + END_TEST +  + START_TEST(test_operand_print_append_string) ++{ +     struct handlebars_operand op; +     struct handlebars_string * string; +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_nil); +@@ -76,10 +83,13 @@ START_TEST(test_operand_print_append_str +     ck_assert_ptr_ne(NULL, string); +     ck_assert_str_eq("[STRING:baz]", string->val); +     handlebars_talloc_free(string); ++} + END_TEST +  + START_TEST(test_operand_print_append_array) ++{ +     // @todo ++} + END_TEST +  + START_TEST(test_opcode_print_1) +@@ -94,6 +104,7 @@ START_TEST(test_opcode_print_1) + END_TEST +  + START_TEST(test_opcode_print_2) ++{ +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_get_context); +     char * expected = "getContext[LONG:2358]"; +     struct handlebars_string * string; +@@ -102,9 +113,11 @@ START_TEST(test_opcode_print_2) +     ck_assert_str_eq(expected, string->val); +     handlebars_talloc_free(opcode); +     handlebars_talloc_free(string); ++} + END_TEST +  + START_TEST(test_opcode_print_3) ++{ +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_invoke_helper); +     char * expected = "invokeHelper[LONG:123][STRING:baz][LONG:456]"; +     struct handlebars_string * string; +@@ -117,9 +130,11 @@ START_TEST(test_opcode_print_3) +     ck_assert_str_eq(expected, string->val); +     handlebars_talloc_free(opcode); +     handlebars_talloc_free(string); ++} + END_TEST +  + START_TEST(test_opcode_print_4) ++{ +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_lookup_on_context); +     char * expected = "lookupOnContext[LONG:123][STRING:baz][LONG:456][STRING:bat]"; +     struct handlebars_string * string; +@@ -133,13 +148,14 @@ START_TEST(test_opcode_print_4) +     ck_assert_str_eq(expected, string->val); +     handlebars_talloc_free(opcode); +     handlebars_talloc_free(string); ++} + END_TEST +  +  + Suite * parser_suite(void) + { +     Suite * s = suite_create("Opcode Printer"); +-     ++ +     REGISTER_TEST_FIXTURE(s, test_operand_print_append_null, "Operand Print Append (null)"); +     REGISTER_TEST_FIXTURE(s, test_operand_print_append_boolean, "Operand Print Append (boolean)"); +     REGISTER_TEST_FIXTURE(s, test_operand_print_append_long, "Operand Print Append (long)"); +@@ -149,7 +165,7 @@ Suite * parser_suite(void) +     REGISTER_TEST_FIXTURE(s, test_opcode_print_2, "Opcode Print (2)"); +     REGISTER_TEST_FIXTURE(s, test_opcode_print_3, "Opcode Print (3)"); +     REGISTER_TEST_FIXTURE(s, test_opcode_print_4, "Opcode Print (4)"); +-	 ++ +     return s; + } +  +@@ -160,13 +176,13 @@ int main(void) +     int error; +  +     talloc_set_log_stderr(); +-     ++ +     // Check if memdebug enabled +     memdebug = getenv("MEMDEBUG") ? atoi(getenv("MEMDEBUG")) : 0; +     if( memdebug ) { +         talloc_enable_leak_report_full(); +     } +-     ++ +     // Set up test suite +     Suite * s = parser_suite(); +     SRunner * sr = srunner_create(s); +@@ -177,12 +193,12 @@ int main(void) +     number_failed = srunner_ntests_failed(sr); +     srunner_free(sr); +     error = (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +-     ++ +     // Generate report for memdebug +     if( memdebug ) { +         talloc_report_full(NULL, stderr); +     } +-     ++ +     // Return +     return error; + } +diff -up ./tests/test_opcodes.c.newcheck ./tests/test_opcodes.c +--- ./tests/test_opcodes.c.newcheck	2017-07-18 03:21:21.000000000 +0200 ++++ ./tests/test_opcodes.c	2020-02-19 16:17:30.602476530 +0100 +@@ -37,10 +37,10 @@ + START_TEST(test_opcode_ctor) + { +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_append); +-     ++ +     ck_assert_ptr_ne(NULL, opcode); +     ck_assert_int_eq(handlebars_opcode_type_append, opcode->type); +-     ++ +     handlebars_talloc_free(opcode); + } + END_TEST +@@ -76,7 +76,7 @@ START_TEST(test_opcode_readable_type) + 			const char * actual = handlebars_opcode_readable_type(_RTYPE_MK(type)); \ + 			ck_assert_str_eq(expected, actual); \ + 		} while(0) +-		 ++ +     _RTYPE_TEST(nil, nil); +     _RTYPE_TEST(ambiguous_block_value, ambiguousBlockValue); +     _RTYPE_TEST(append, append); +@@ -86,33 +86,33 @@ START_TEST(test_opcode_readable_type) +     _RTYPE_TEST(push_context, pushContext); +     _RTYPE_TEST(push_hash, pushHash); +     _RTYPE_TEST(resolve_possible_lambda, resolvePossibleLambda); +-     ++ +     _RTYPE_TEST(get_context, getContext); +     _RTYPE_TEST(push_program, pushProgram); +-     ++ +     _RTYPE_TEST(append_content, appendContent); +     _RTYPE_TEST(assign_to_hash, assignToHash); +     _RTYPE_TEST(block_value, blockValue); +     _RTYPE_TEST(push, push); +     _RTYPE_TEST(push_literal, pushLiteral); +     _RTYPE_TEST(push_string, pushString); +-     ++ +     _RTYPE_TEST(invoke_partial, invokePartial); +     _RTYPE_TEST(push_id, pushId); +     _RTYPE_TEST(push_string_param, pushStringParam); +-     ++ +     _RTYPE_TEST(invoke_ambiguous, invokeAmbiguous); +-     ++ +     _RTYPE_TEST(invoke_known_helper, invokeKnownHelper); +-     ++ +     _RTYPE_TEST(invoke_helper, invokeHelper); +-     ++ +     _RTYPE_TEST(lookup_on_context, lookupOnContext); +-     ++ +     _RTYPE_TEST(lookup_data, lookupData); +-     ++ +     _RTYPE_TEST(invalid, invalid); +-     ++ +     ck_assert_str_eq("invalid", handlebars_opcode_readable_type(13434534)); + } + END_TEST +@@ -120,7 +120,7 @@ END_TEST + START_TEST(test_operand_set_null) + { +     struct handlebars_operand op; +-     ++ +     handlebars_operand_set_null(&op); +     ck_assert_int_eq(handlebars_operand_type_null, op.type); +     ck_assert_int_eq(0, op.data.boolval); +@@ -132,7 +132,7 @@ END_TEST + START_TEST(test_operand_set_boolval) + { +     struct handlebars_operand op; +-     ++ +     handlebars_operand_set_boolval(&op, 1); +     ck_assert_int_eq(handlebars_operand_type_boolean, op.type); +     ck_assert_int_eq(1, op.data.boolval); +@@ -142,11 +142,11 @@ END_TEST + START_TEST(test_operand_set_longval) + { +     struct handlebars_operand op; +-     ++ +     handlebars_operand_set_longval(&op, 12); +     ck_assert_int_eq(handlebars_operand_type_long, op.type); +     ck_assert_int_eq(12, op.data.longval); +-     ++ +     handlebars_operand_set_longval(&op, -65); +     ck_assert_int_eq(handlebars_operand_type_long, op.type); +     ck_assert_int_eq(-65, op.data.longval); +@@ -158,7 +158,7 @@ START_TEST(test_operand_set_stringval) +     struct handlebars_operand op; +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_nil); +     struct handlebars_string * string = handlebars_string_ctor(context, HBS_STRL("bar")); +-     ++ +     handlebars_operand_set_stringval(context, opcode, &op, string); +  +     ck_assert_int_eq(handlebars_operand_type_string, op.type); +@@ -190,6 +190,7 @@ END_TEST + */ +  + START_TEST(test_operand_set_arrayval) ++{ +     struct handlebars_operand op; +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_nil); +     const char * strs[] = { +@@ -208,9 +209,11 @@ START_TEST(test_operand_set_arrayval) +     for( ptr1 = strs, ptr2 = op.data.array.array; *ptr1 /*|| *ptr2*/; ptr1++, ptr2++ ) { +         ck_assert_str_eq(*ptr1, ptr2->string->val); +     } ++} + END_TEST +  + START_TEST(test_operand_set_arrayval_string) ++{ +     struct handlebars_string * strings[5]; +     struct handlebars_opcode * opcode = handlebars_opcode_ctor(context, handlebars_opcode_type_invalid); +  +@@ -232,16 +235,17 @@ START_TEST(test_operand_set_arrayval_str +     for( ptr1 = strings, ptr2 = opcode->op1.data.array.array; *ptr1 /* || *ptr2*/; ptr1++, ptr2++ ) { +         ck_assert_str_eq((*ptr1)->val, ptr2->string->val); +     } ++} + END_TEST +  + Suite * parser_suite(void) + { +     Suite * s = suite_create("Opcodes"); +-     ++ + 	REGISTER_TEST_FIXTURE(s, test_opcode_ctor, "Constructor"); + 	REGISTER_TEST_FIXTURE(s, test_opcode_ctor_failed_alloc, "Constructor (failed alloc)"); + 	REGISTER_TEST_FIXTURE(s, test_opcode_readable_type, "Readable Type"); +-	 ++ + 	REGISTER_TEST_FIXTURE(s, test_operand_set_null, "Set operand null"); + 	REGISTER_TEST_FIXTURE(s, test_operand_set_boolval, "Set operand boolval"); + 	REGISTER_TEST_FIXTURE(s, test_operand_set_longval, "Set operand longval"); +@@ -249,8 +253,8 @@ Suite * parser_suite(void) + 	//REGISTER_TEST_FIXTURE(s, test_operand_set_stringval_failed_alloc, "Set operand stringval (failed alloc)"); +     REGISTER_TEST_FIXTURE(s, test_operand_set_arrayval, "Set operand arrayval"); +     REGISTER_TEST_FIXTURE(s, test_operand_set_arrayval_string, "operand_set_arrayval_string"); +-	 +-	 ++ ++ +     return s; + } +  +@@ -261,13 +265,13 @@ int main(void) +     int error; +  +     talloc_set_log_stderr(); +-     ++ +     // Check if memdebug enabled +     memdebug = getenv("MEMDEBUG") ? atoi(getenv("MEMDEBUG")) : 0; +     if( memdebug ) { +         talloc_enable_leak_report_full(); +     } +-     ++ +     // Set up test suite +     Suite * s = parser_suite(); +     SRunner * sr = srunner_create(s); +@@ -278,12 +282,12 @@ int main(void) +     number_failed = srunner_ntests_failed(sr); +     srunner_free(sr); +     error = (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +-     ++ +     // Generate report for memdebug +     if( memdebug ) { +         talloc_report_full(NULL, stderr); +     } +-     ++ +     // Return +     return error; + } +diff -up ./tests/test_string.c.newcheck ./tests/test_string.c +--- ./tests/test_string.c.newcheck	2017-07-18 03:21:21.000000000 +0200 ++++ ./tests/test_string.c	2020-02-19 16:17:30.602476530 +0100 +@@ -33,167 +33,210 @@ +  +  + START_TEST(test_handlebars_string_hash) ++{ + #if ULONG_MAX <= 4294967295 +     ck_assert_uint_eq(3127933309, handlebars_string_hash(HBS_STRL("foobar\xFF"))); + #else +     ck_assert_uint_eq(229466050689405, handlebars_string_hash(HBS_STRL("foobar\xFF"))); + #endif ++} + END_TEST +  + START_TEST(test_handlebars_strnstr_1) ++{ +     const char string[] = ""; +     const char * res = handlebars_strnstr(HBS_STRL(string), HBS_STRL("")); +     ck_assert_ptr_eq(res, NULL); ++} + END_TEST +  + START_TEST(test_handlebars_strnstr_2) ++{ +     const char string[] = "abcdefgh"; +     const char * res = handlebars_strnstr(HBS_STRL(string), HBS_STRL("def")); +     ck_assert_ptr_eq(res, string + 3); ++} + END_TEST +  + START_TEST(test_handlebars_strnstr_3) ++{ +     const char string[] = "a\0bcdefgh"; +     const char * res = handlebars_strnstr(HBS_STRL(string), HBS_STRL("def")); +     ck_assert_ptr_eq(res, string + 4); ++} + END_TEST +  + START_TEST(test_handlebars_strnstr_4) ++{ +     const char string[] = "abcdefgh"; +     const char * res = handlebars_strnstr(string, 4, HBS_STRL("fgh")); +     ck_assert_ptr_eq(res, NULL); ++} + END_TEST +  + START_TEST(test_handlebars_strnstr_5) ++{ +     const char string[] = "[foo\\\\]"; +     const char * res = handlebars_strnstr(HBS_STRL(string), HBS_STRL("\\]")); +     ck_assert_ptr_eq(res, string + 5); ++} + END_TEST +  + START_TEST(test_handlebars_string_reduce_1) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("abcdef")); +     input = handlebars_str_reduce(input, HBS_STRL("bcd"), HBS_STRL("qq")); +     ck_assert_str_eq("aqqef", input->val); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_reduce_2) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("")); +     input = handlebars_str_reduce(input, HBS_STRL("a"), HBS_STRL("")); +     ck_assert_str_eq("", input->val); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_reduce_3) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("QQQ")); +     input = handlebars_str_reduce(input, HBS_STRL("Q"), HBS_STRL("W")); +     ck_assert_str_eq("WWW", input->val); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_addcslashes_1) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("")); +     struct handlebars_string * actual = handlebars_string_addcslashes(context, input, HBS_STRL("")); +     ck_assert_str_eq("", actual->val); +     ck_assert_ptr_ne(input, actual); +     handlebars_talloc_free(input); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_addcslashes_2) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\ttest\rlines\n")); +     struct handlebars_string * actual = handlebars_string_addcslashes(context, input, HBS_STRL("\r\n\t")); +     ck_assert_str_eq("\\ttest\\rlines\\n", actual->val); +     ck_assert_ptr_ne(input, actual); +     handlebars_talloc_free(input); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_addcslashes_3) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("amazing biscuit circus")); +     struct handlebars_string * actual = handlebars_string_addcslashes(context, input, HBS_STRL("abc")); +     ck_assert_str_eq("\\am\\azing \\bis\\cuit \\cir\\cus", actual->val); +     ck_assert_ptr_ne(input, actual); +     handlebars_talloc_free(input); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_addcslashes_4) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("kaboemkara!")); +     struct handlebars_string * actual = handlebars_string_addcslashes(context, input, HBS_STRL("")); +     ck_assert_str_eq("kaboemkara!", actual->val); +     ck_assert_ptr_ne(input, actual); +     handlebars_talloc_free(input); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_addcslashes_5) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("foobarbaz")); +     struct handlebars_string * actual = handlebars_string_addcslashes(context, input, HBS_STRL("bar")); +     ck_assert_str_eq("foo\\b\\a\\r\\b\\az", actual->val); +     ck_assert_ptr_ne(input, actual); +     handlebars_talloc_free(input); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_addcslashes_6) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\a\v\b\f\x3")); +     struct handlebars_string * actual = handlebars_string_addcslashes(context, input, HBS_STRL("\a\v\b\f\x3")); +     ck_assert_str_eq("\\a\\v\\b\\f\\003", actual->val); +     ck_assert_ptr_ne(input, actual); +     handlebars_talloc_free(input); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_stripcslashes_1) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\\n\\r")); +     struct handlebars_string * actual = handlebars_string_stripcslashes(input); +     ck_assert_str_eq("\n\r", actual->val); +     ck_assert_ptr_eq(input, actual); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_stripcslashes_2) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\\065\\x64")); +     struct handlebars_string * actual = handlebars_string_stripcslashes(input); +     ck_assert_str_eq("5d", actual->val); +     ck_assert_ptr_eq(input, actual); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_stripcslashes_3) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("")); +     struct handlebars_string * actual = handlebars_string_stripcslashes(input); +     ck_assert_str_eq("", actual->val); +     ck_assert_ptr_eq(input, actual); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_stripcslashes_4) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\\{")); +     struct handlebars_string * actual = handlebars_string_stripcslashes(input); +     ck_assert_str_eq("{", actual->val); +     ck_assert_ptr_eq(input, actual); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_stripcslashes_5) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\\a\\t\\v\\b\\f\\\\")); +     struct handlebars_string * actual = handlebars_string_stripcslashes(input); +     ck_assert_str_eq("\a\t\v\b\f\\", actual->val); +     ck_assert_ptr_eq(input, actual); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_stripcslashes_6) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\\x3")); +     struct handlebars_string * actual = handlebars_string_stripcslashes(input); +     ck_assert_str_eq("\x3", actual->val); +     ck_assert_ptr_eq(input, actual); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_stripcslashes_7) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("\\0test")); +     struct handlebars_string * actual = handlebars_string_stripcslashes(input); +     ck_assert_str_eq("", actual->val); +@@ -203,67 +246,87 @@ START_TEST(test_handlebars_string_stripc +     ck_assert_int_eq(0, actual->val[5]); +     ck_assert_ptr_eq(input, actual); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_asprintf) ++{ +     struct handlebars_string * actual = handlebars_string_asprintf(context, "|%d|%c|%s|", 148, 56, "1814"); +     ck_assert_str_eq(actual->val, "|148|8|1814|"); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_asprintf_append) ++{ +     struct handlebars_string * input = handlebars_string_ctor(context, HBS_STRL("PREFIX")); +     input = handlebars_string_asprintf_append(context, input, "|%d|%c|%s|", 148, 56, "1814"); +     ck_assert_str_eq(input->val, "PREFIX|148|8|1814|"); +     handlebars_talloc_free(input); ++} + END_TEST +  + START_TEST(test_handlebars_string_htmlspecialchars_1) ++{ +     struct handlebars_string * actual = handlebars_string_htmlspecialchars(context, HBS_STRL("&")); +     ck_assert_str_eq("&", actual->val); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_htmlspecialchars_2) ++{ +     struct handlebars_string * actual = handlebars_string_htmlspecialchars(context, HBS_STRL("<")); +     ck_assert_str_eq("<", actual->val); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_htmlspecialchars_3) ++{ +     struct handlebars_string * actual = handlebars_string_htmlspecialchars(context, HBS_STRL(">")); +     ck_assert_str_eq(">", actual->val); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_htmlspecialchars_4) ++{ +     struct handlebars_string * actual = handlebars_string_htmlspecialchars(context, HBS_STRL("'")); +     ck_assert_str_eq("'", actual->val); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_htmlspecialchars_5) ++{ +     struct handlebars_string * actual = handlebars_string_htmlspecialchars(context, HBS_STRL("\"")); +     ck_assert_str_eq(""", actual->val); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_htmlspecialchars_6) ++{ +     struct handlebars_string * actual = handlebars_string_htmlspecialchars(context, HBS_STRL("a&b<c>d\'e\"f")); +     ck_assert_str_eq("a&b<c>d'e"f", actual->val); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_implode_1) ++{ +     struct handlebars_string ** parts = handlebars_talloc_array(context, struct handlebars_string *, 1); +     parts[0] = NULL; +     struct handlebars_string * actual = handlebars_string_implode(context, HBS_STRL("!!!"), parts); +     ck_assert_str_eq(actual->val, ""); +     handlebars_talloc_free(parts); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_implode_2) ++{ +     struct handlebars_string ** parts = handlebars_talloc_array(context, struct handlebars_string *, 3); +     parts[0] = handlebars_string_ctor(context, HBS_STRL("one")); +     parts[1] = handlebars_string_ctor(context, HBS_STRL("two")); +@@ -272,54 +335,67 @@ START_TEST(test_handlebars_string_implod +     ck_assert_str_eq(actual->val, "one!two"); +     handlebars_talloc_free(parts); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_handlebars_string_ltrim_1) ++{ +     struct handlebars_string * in = handlebars_string_ctor(context, HBS_STRL(" \n \r test ")); +     struct handlebars_string * ret = handlebars_string_ltrim(in, HBS_STRL(" \t\r\n")); +     ck_assert_str_eq(ret->val, "test "); +     ck_assert_ptr_eq(in, ret); +     handlebars_talloc_free(in); ++} + END_TEST +  + START_TEST(test_handlebars_string_ltrim_2) ++{ +     struct handlebars_string * in = handlebars_string_ctor(context, HBS_STRL("\n  ")); +     struct handlebars_string * ret = handlebars_string_ltrim(in, HBS_STRL(" \t")); +     ck_assert_str_eq(ret->val, "\n  "); +     ck_assert_ptr_eq(in, ret); +     handlebars_talloc_free(in); ++} + END_TEST +  + START_TEST(test_handlebars_string_ltrim_3) ++{ +     struct handlebars_string * in = handlebars_string_ctor(context, HBS_STRL("")); +     struct handlebars_string * ret = handlebars_string_ltrim(in, HBS_STRL("")); +     ck_assert_str_eq(ret->val, ""); +     ck_assert_ptr_eq(in, ret); +     handlebars_talloc_free(in); ++} + END_TEST +  + START_TEST(test_handlebars_string_rtrim_1) ++{ +     struct handlebars_string * in = handlebars_string_ctor(context, HBS_STRL("test \n \r ")); +     struct handlebars_string * ret = handlebars_string_rtrim(in, HBS_STRL(" \t\r\n")); +     ck_assert_str_eq(ret->val, "test"); +     ck_assert_ptr_eq(in, ret); +     handlebars_talloc_free(in); ++} + END_TEST +  + START_TEST(test_handlebars_string_rtrim_2) ++{ +     struct handlebars_string * in = handlebars_string_ctor(context, HBS_STRL("\n")); +     struct handlebars_string * ret = handlebars_string_rtrim(in, HBS_STRL(" \v\t\r\n")); +     ck_assert_str_eq(ret->val, ""); +     ck_assert_ptr_eq(in, ret); +     handlebars_talloc_free(in); ++} + END_TEST +  + START_TEST(test_handlebars_string_rtrim_3) ++{ +     struct handlebars_string * in = handlebars_string_ctor(context, HBS_STRL("")); +     struct handlebars_string * ret = handlebars_string_rtrim(in, HBS_STRL("")); +     ck_assert_str_eq(ret->val, ""); +     ck_assert_ptr_eq(in, ret); +     handlebars_talloc_free(in); ++} + END_TEST +  + Suite * parser_suite(void) +diff -up ./tests/test_token.c.newcheck ./tests/test_token.c +--- ./tests/test_token.c.newcheck	2017-07-18 03:21:21.000000000 +0200 ++++ ./tests/test_token.c	2020-02-19 16:17:30.603476525 +0100 +@@ -38,13 +38,13 @@ START_TEST(test_token_ctor) + { + 	struct handlebars_string * string = handlebars_string_ctor(context, HBS_STRL("{{")); +     struct handlebars_token * token = handlebars_token_ctor(HBSCTX(parser), OPEN, string); +-     ++ +     ck_assert_ptr_ne(NULL, token); +     ck_assert_ptr_ne(NULL, token->string); +     ck_assert_int_eq(OPEN, token->token); +     ck_assert_str_eq(token->string->val, "{{"); +     ck_assert_uint_eq(sizeof("{{") - 1, token->string->len); +-     ++ +     handlebars_token_dtor(token); + } + END_TEST +@@ -85,9 +85,9 @@ START_TEST(test_token_get_type) + { + 	struct handlebars_string * string = handlebars_string_ctor(context, HBS_STRL("{{")); +     struct handlebars_token * token = handlebars_token_ctor(context, OPEN, string); +-     ++ +     ck_assert_int_eq(OPEN, handlebars_token_get_type(token)); +-     ++ +     handlebars_token_dtor(token); + } + END_TEST +@@ -99,7 +99,7 @@ START_TEST(test_token_get_text) +  +     ck_assert_str_eq("{{", handlebars_token_get_text(token)->val); +     ck_assert_uint_eq(sizeof("{{") - 1, handlebars_token_get_text(token)->len); +-     ++ +     handlebars_token_dtor(token); + } + END_TEST +@@ -113,7 +113,7 @@ START_TEST(test_token_readable_type) + 			const char * actual = handlebars_token_readable_type(str); \ + 			ck_assert_str_eq(expected, actual); \ + 		} while(0) +-	 ++ + 	_RTYPE_TEST(BOOLEAN); + 	_RTYPE_TEST(CLOSE); + 	_RTYPE_TEST(CLOSE_RAW_BLOCK); +@@ -140,7 +140,7 @@ START_TEST(test_token_readable_type) + 	_RTYPE_TEST(SEP); + 	_RTYPE_TEST(STRING); + 	ck_assert_str_eq("UNKNOWN", handlebars_token_readable_type(-1)); +-	 ++ + 	// Added in v3 + 	_RTYPE_TEST(CLOSE_BLOCK_PARAMS); + 	_RTYPE_TEST(OPEN_BLOCK_PARAMS); +@@ -163,7 +163,7 @@ START_TEST(test_token_reverse_readable_t +     		int actual = handlebars_token_reverse_readable_type(actual_str); \ +     		ck_assert_int_eq(expected, actual); \ +     	} while(0) +-	 ++ + 	_RTYPE_REV_TEST(BOOLEAN); + 	_RTYPE_REV_TEST(CLOSE); + 	_RTYPE_REV_TEST(CLOSE_RAW_BLOCK); +@@ -190,7 +190,7 @@ START_TEST(test_token_reverse_readable_t + 	_RTYPE_REV_TEST(SEP); + 	_RTYPE_REV_TEST(STRING); + 	ck_assert_int_eq(-1, handlebars_token_reverse_readable_type("UNKNOWN")); +-	 ++ + 	// Added in v3 + 	_RTYPE_REV_TEST(CLOSE_BLOCK_PARAMS); + 	_RTYPE_REV_TEST(OPEN_BLOCK_PARAMS); +@@ -204,33 +204,40 @@ START_TEST(test_token_reverse_readable_t + END_TEST +  + START_TEST(test_token_print) ++{ +     struct handlebars_string * string = handlebars_string_ctor(context, HBS_STRL("{{")); +     struct handlebars_token * tok = handlebars_token_ctor(context, OPEN, string); +     struct handlebars_string * actual = handlebars_token_print(context, tok, 0); +     ck_assert_str_eq("OPEN [{{] ", actual->val); +     handlebars_talloc_free(tok); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_token_print2) ++{ +     struct handlebars_string * string = handlebars_string_ctor(context, HBS_STRL("this\nis\ra\ttest")); +     struct handlebars_token * tok = handlebars_token_ctor(context, CONTENT, string); +     struct handlebars_string * actual = handlebars_token_print(context, tok, 0); +     ck_assert_str_eq("CONTENT [this\\nis\\ra\\ttest] ", actual->val); +     handlebars_talloc_free(tok); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_token_print3) ++{ +     struct handlebars_string * string = handlebars_string_ctor(context, HBS_STRL("this\nis\ra\ttest")); +     struct handlebars_token * tok = handlebars_token_ctor(context, CONTENT, string); +     struct handlebars_string * actual = handlebars_token_print(context, tok, handlebars_token_print_flag_newlines); +     ck_assert_str_eq("CONTENT [this\\nis\\ra\\ttest]\n", actual->val); +     handlebars_talloc_free(tok); +     handlebars_talloc_free(actual); ++} + END_TEST +  + START_TEST(test_token_print_failed_alloc) ++{ + #if HANDLEBARS_MEMORY +     struct handlebars_string * string = handlebars_string_ctor(context, HBS_STRL("tok1")); +     struct handlebars_token * tok = handlebars_token_ctor(context, CONTENT, string); +@@ -251,12 +258,13 @@ START_TEST(test_token_print_failed_alloc + #else +     fprintf(stderr, "Skipped, memory testing functions are disabled\n"); + #endif ++} + END_TEST +  + Suite * parser_suite(void) + { + 	Suite * s = suite_create("Token"); +-	 ++ + 	REGISTER_TEST_FIXTURE(s, test_token_ctor, "Constructor"); + 	REGISTER_TEST_FIXTURE(s, test_token_ctor_failed_alloc, "Constructor (failed alloc)"); + 	REGISTER_TEST_FIXTURE(s, test_token_dtor, "Destructor"); +@@ -279,13 +287,13 @@ int main(void) +     int error; +  + 	talloc_set_log_stderr(); +-     ++ +     // Check if memdebug enabled +     memdebug = getenv("MEMDEBUG") ? atoi(getenv("MEMDEBUG")) : 0; +     if( memdebug ) { +         talloc_enable_leak_report_full(); +     } +-     ++ +     // Set up test suite +     Suite * s = parser_suite(); +     SRunner * sr = srunner_create(s); +@@ -296,12 +304,12 @@ int main(void) +     number_failed = srunner_ntests_failed(sr); +     srunner_free(sr); +     error = (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +-     ++ +     // Generate report for memdebug +     if( memdebug ) { +         talloc_report_full(NULL, stderr); +     } +-     ++ +     // Return +     return error; + } +diff -up ./tests/test_value.c.newcheck ./tests/test_value.c +--- ./tests/test_value.c.newcheck	2017-07-18 03:21:21.000000000 +0200 ++++ ./tests/test_value.c	2020-02-19 16:17:30.603476525 +0100 +@@ -438,6 +438,7 @@ START_TEST(test_convert) + END_TEST +  + START_TEST(test_json_parse_error) ++{ +     jmp_buf buf; +  +     if( handlebars_setjmp_ex(context, &buf) ) { +@@ -450,9 +451,11 @@ START_TEST(test_json_parse_error) +  +     handlebars_value_from_json_string(context, "{\"key\":1"); +     ck_assert_msg(0, "Parse error should have longjmp'd"); ++} + END_TEST +  + START_TEST(test_yaml_parse_error) ++{ +     jmp_buf buf; +  +     if( handlebars_setjmp_ex(context, &buf) ) { +@@ -465,6 +468,7 @@ START_TEST(test_yaml_parse_error) +  +     handlebars_value_from_yaml_string(context, "---\n'"); +     ck_assert_msg(0, "Parse error should have longjmp'd"); ++} + END_TEST +  + Suite * parser_suite(void) diff --git a/libhandlebars-gcc10.patch b/libhandlebars-gcc10.patch new file mode 100644 index 0000000..f687156 --- /dev/null +++ b/libhandlebars-gcc10.patch @@ -0,0 +1,21 @@ +From d936e6364b3b86c913258be1248fa530ce75e2f0 Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@remirepo.net> +Date: Wed, 19 Feb 2020 15:52:43 +0100 +Subject: [PATCH] fix multiple definition + +--- + tests/utils.h | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/tests/utils.h b/tests/utils.h +index 5515e93..1ccbb2e 100644 +--- a/tests/utils.h ++++ b/tests/utils.h +@@ -67,7 +67,6 @@ + #endif +  + struct handlebars_value; +-const int MOD_ADLER; +  + typedef void (*scan_directory_cb)(char * filename); +  diff --git a/libhandlebars.spec b/libhandlebars.spec index 5380463..185822d 100644 --- a/libhandlebars.spec +++ b/libhandlebars.spec @@ -1,6 +1,6 @@  # remirepo/fedora spec file for libhandlebars  # -# Copyright (c) 2017 Remi Collet +# Copyright (c) 2017-2020 Remi Collet  # License: CC-BY-SA  # http://creativecommons.org/licenses/by-sa/4.0/  # @@ -24,7 +24,7 @@  Name:    %{libname}  Version: 0.6.4 -Release: 3%{?dist} +Release: 4%{?dist}  Summary: Handlebars C library  License: LGPLv2+ @@ -33,6 +33,11 @@ Source0: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{gh_  Source1: https://github.com/%{hspec_owner}/%{hspec_project}/archive/%{hspec_commit}/%{hspec_project}-%{hspec_short}.tar.gz  Source2: https://github.com/%{mspec_owner}/%{mspec_project}/archive/%{mspec_commit}/%{mspec_project}-%{mspec_short}.tar.gz +# For GCC 10 +Patch0: %{libname}-gcc10.patch +# Fox new check library +Patch1: %{libname}-check.patch +  BuildRequires:  gcc  BuildRequires:  autoconf  BuildRequires:  automake @@ -78,6 +83,8 @@ This package provides handlebarsc command line tool split off %{libname}.  %prep  %setup -qn %{gh_project}-%{gh_commit} -a1 -a2 +%patch0 -p1 -b .gcc10 +%patch1 -p1 -b .newcheck  mkdir spec  mv %{hspec_project}-%{hspec_commit} spec/handlebars @@ -123,6 +130,11 @@ make test  %changelog +* Wed Feb 19 2020 Remi Collet <remi@remirepo.net> - 0.6.4-4 +- add fix for GCC 10 from +  https://github.com/jbboehr/handlebars.c/pull/76 +- add fix for new check library adapted from upstream +  * Tue Jun 26 2018 Remi Collet <remi@remirepo.net> - 0.6.4-3  - F28 rebuild  | 
