From 4ef1e93f07bda796d41254728702b20320be3001 Mon Sep 17 00:00:00 2001 From: lexborisov Date: Wed, 14 Dec 2016 22:09:21 +0300 Subject: [PATCH] Fixes after check the Coverity --- .travis.yml | 15 ------ CHANGELOG.md | Bin 102 -> 150 bytes Makefile | 2 +- README.md | 2 +- devel/osx/Modest.xcodeproj/project.pbxproj | 8 ++- .../UserInterfaceState.xcuserstate | Bin 114685 -> 116957 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 18 +++++++ devel/osx/Modest/main.c | 21 ++------ include/mycss/selectors/myosi.h | 2 +- include/myhtml/utils/mctree.h | 4 +- projects/CMakeLists.txt | 7 ++- source/modest/finder/pseudo_class.c | 6 +-- source/modest/finder/thread.c | 2 + source/modest/style/map.c | 3 -- source/mycss/convert.c | 6 +-- source/mycss/declaration/init.c | 1 + source/mycss/declaration/serialization.c | 19 ++++--- source/mycss/declaration/state.c | 2 +- source/mycss/mycss.c | 3 -- source/mycss/namespace/init.c | 11 ++-- source/mycss/namespace/parser.c | 8 +-- source/mycss/property/parser.c | 10 ++-- source/mycss/property/shared.c | 1 + source/mycss/selectors/function_parser.c | 15 +++--- source/mycss/selectors/myosi.h | 2 +- source/mycss/selectors/serialization.c | 7 +-- source/mycss/tokenizer.c | 3 ++ source/mycss/values/color.c | 4 +- source/mycss/values/color_parser.c | 5 ++ source/mycss/values/serialization.c | 2 +- source/myfont/cmap.c | 2 +- source/myfont/glyf.c | 6 +-- source/myfont/myfont.c | 15 +++--- source/myhtml/encoding.c | 2 +- source/myhtml/myhtml.c | 29 +++++++--- source/myhtml/tree.c | 16 ++---- source/myhtml/utils.c | 50 ++++-------------- source/myhtml/utils/mcobject_async.c | 13 +++-- source/myhtml/utils/mctree.h | 4 +- test/mycss/declaration.c | 26 ++++++--- 40 files changed, 178 insertions(+), 174 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6b9b061..a058837 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,19 +3,4 @@ compiler: - clang - gcc install: false - -env: - global: - - secure: "gNSRCjo+hi14yLpCDEmwZfzy0DFoOR+9BmkdpJhTK8NjUvIy+RmFtXgT98QHgh+fow8v/YXl8hSnyDT2+oSmsKN9P113ssgYihwoB4IuIBLSIrAf9KPfhIh6LZC23lKltQUrP9yPo3jzdD1dte1xv2tKRImDZ1Cze987EjDBbSwuVP/Gj3JlWMAafEPrh48jCM/O4DXR4podcd1biXbyX8+lbYJSFVaIq0SuagzK5Kjv8nDAFYlNk27RdhQGemmZOsM5xQM4PpgKpcQVHh0YuObCryf/O+orCDh7dOu9QlbMijabYxz/Jx7fZ1mLQGm7Kj6ETdCcf80MrrDechjJgh7uyFE/+VPDfkdaSCm1vMJCNBRgFSM0bxXqtLAyNs9TNOIJ3TUv3M4eN98Feh7I3ip9eTU/0R36HKU7sk+yotmOuAMDaMikbTQ2UuHekKev3TD0dA5O6xatyDF3jCnTJ+8aYQ096A79ZSabWUiLe6IyV/NauqSfY+mOz2NA+TxqzW92HqStdvmeOuSqCGdkGi3o2z77jEez795l2bqnIziuZhojfxjtvc/ryaZaBMYWqjSlOzRcix/SwIt8ccDCXJ4F/aNi16mYuDdL5c2mQaxtZ5Xz1IZduU87f6pWHdhLPoRMqpd/XChJVwKSFxbKmRWynUfHTcwJePSSyn5GRNA=" - -addons: - coverity_scan: - project: - name: "lexborisov/Modest" - description: "Build submitted via Travis CI" - notification_email: lex.borisov@gmail.com - build_command_prepend: "" - build_command: "make -j4" - branch_pattern: coverity_scan - script: make -j4 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 56d4d29fa20b57a5c26add0ab448551268523184..48c2d4323e7eb8234f9df781329b3a97e49eef6e 100644 GIT binary patch delta 53 rcmYeB#>o5sp8$}sH__RDLn~# delta 23 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�<{6k6*jLn1|$J*_&IcUVoyvpmm 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 X>HPDf|NA4V(Et1I|Noz%W^eo-t-Wy5 literal 114685 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 diff --git a/devel/osx/Modest.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/devel/osx/Modest.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index fe2b454..757dddd 100644 --- a/devel/osx/Modest.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/devel/osx/Modest.xcodeproj/xcuserdata/alexanderborisov.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -2,4 +2,22 @@ + + + + + + diff --git a/devel/osx/Modest/main.c b/devel/osx/Modest/main.c index fb170d0..c020ff2 100644 --- a/devel/osx/Modest/main.c +++ b/devel/osx/Modest/main.c @@ -157,7 +157,7 @@ void print_tree_after_all(modest_t* modest, myhtml_tree_t* myhtml_tree, myhtml_t if(m_node) { printf("\tstyles: "); - modest_node_raw_serialization(mycss_entry, m_node, serialization_callback, NULL); + modest_node_raw_serialization(modest, m_node, serialization_callback, NULL); printf("\n"); } @@ -206,15 +206,7 @@ int main(int argc, const char * argv[]) { //char *css_f = "/new/C-git/bootstrap.css"; char *html = "sdsd

"; - char *css = "hr { \ - color: gray; \ - border-style: inset; \ - border-width: 1px; \ - margin-block-start: 0.5em; \ - margin-inline-end: auto; \ - margin-block-end: 0.5em; \ - margin-inline-start: auto; \ -}"; + char *css = "div {color: yellowgreen}"; char *selector = "menu"; @@ -247,7 +239,7 @@ int main(int argc, const char * argv[]) { modest_finder_t* finder = modest_finder_create(); - modest_finder_init(finder, myhtml_tree, stylesheet); + modest_finder_init(finder); /* threads */ modest_finder_thread_t *finder_thread = modest_finder_thread_create(); @@ -263,13 +255,6 @@ int main(int argc, const char * argv[]) { //print_tree_after_all(modest, myhtml_tree, myhtml_tree->node_html, mycss_entry); - - - - - - - printf("\n\n------------\nInformation:\n"); printf("\tTicks/sec: %llu\n", (unsigned long long) myhtml_hperf_res(NULL)); myhtml_hperf_print("\tFound selectors", parse_start, parse_stop, stdout); diff --git a/include/mycss/selectors/myosi.h b/include/mycss/selectors/myosi.h index 5a05cc3..a255e75 100644 --- a/include/mycss/selectors/myosi.h +++ b/include/mycss/selectors/myosi.h @@ -213,7 +213,7 @@ struct mycss_selectors { struct mycss_selectors_entry { mycss_selectors_type_t type; - int sub_type; + unsigned int sub_type; mycss_selectors_flags_t flags; mycss_namespace_entry_t* ns_entry; diff --git a/include/myhtml/utils/mctree.h b/include/myhtml/utils/mctree.h index 1ea16fe..aaf79c0 100644 --- a/include/myhtml/utils/mctree.h +++ b/include/myhtml/utils/mctree.h @@ -45,8 +45,8 @@ extern "C" { #define mctree_node_add(mctree) \ mctree->nodes_length++; \ - if(mctree->nodes_length == mctree->nodes_size) { \ - mctree->nodes_size += 4096; \ + if(mctree->nodes_length >= mctree->nodes_size) { \ + mctree->nodes_size = mctree->nodes_length + 4096; \ mctree->nodes = (mctree_node_t*)myhtml_realloc(mctree->nodes, \ sizeof(mctree_node_t) * mctree->nodes_size); \ } \ diff --git a/projects/CMakeLists.txt b/projects/CMakeLists.txt index 09009ef..084ae22 100644 --- a/projects/CMakeLists.txt +++ b/projects/CMakeLists.txt @@ -11,7 +11,7 @@ set(MODEST_PROJECT_SOURCE "${MODEST_PROJECT_DIR_ROOT}/source") set(MODEST_VERSION_MAJOR 0) set(MODEST_VERSION_MINOR 0) -set(MODEST_VERSION_PATCH 1) +set(MODEST_VERSION_PATCH 4) set(MODEST_VERSION_STRING "${MODEST_VERSION_MAJOR}.${MODEST_VERSION_MINOR}.${MODEST_VERSION_PATCH}") project(${MODEST_PROJECT_NAME}) @@ -70,18 +70,22 @@ endif() ######################### if(DEFINED MODEST_EXTERN_MALLOC) add_definitions(-DMODEST_EXTERN_MALLOC=${MODEST_EXTERN_MALLOC}) + add_definitions(-DMyHTML_EXTERN_MALLOC=${MODEST_EXTERN_MALLOC}) endif() if(DEFINED MODEST_EXTERN_REALLOC) add_definitions(-DMODEST_EXTERN_REALLOC=${MODEST_EXTERN_REALLOC}) + add_definitions(-DMyHTML_EXTERN_REALLOC=${MODEST_EXTERN_REALLOC}) endif() if(DEFINED MODEST_EXTERN_CALLOC) add_definitions(-DMODEST_EXTERN_CALLOC=${MODEST_EXTERN_CALLOC}) + add_definitions(-DMyHTML_EXTERN_CALLOC=${MODEST_EXTERN_CALLOC}) endif() if(DEFINED MODEST_EXTERN_FREE) add_definitions(-DMODEST_EXTERN_FREE=${MODEST_EXTERN_FREE}) + add_definitions(-DMyHTML_EXTERN_FREE=${MODEST_EXTERN_FREE}) endif() ################ @@ -126,6 +130,7 @@ endif() if(MODEST_BUILD_WITHOUT_THREADS STREQUAL "YES") message(STATUS "Build without POSIX Threads") add_definitions(-DMODEST_BUILD_WITHOUT_THREADS) + add_definitions(-DMyHTML_BUILD_WITHOUT_THREADS) else() message(STATUS "Build with POSIX Threads") endif() diff --git a/source/modest/finder/pseudo_class.c b/source/modest/finder/pseudo_class.c index 5dcd8e7..8e5bc80 100644 --- a/source/modest/finder/pseudo_class.c +++ b/source/modest/finder/pseudo_class.c @@ -569,7 +569,7 @@ bool modest_finder_selector_sub_type_pseudo_class_empty(modest_finder_t* finder, bool modest_finder_selector_sub_type_pseudo_class_enabled(modest_finder_t* finder, myhtml_tree_node_t* base_node, mycss_selectors_entry_t* selector, mycss_selectors_specificity_t* spec) { - return ~modest_finder_selector_sub_type_pseudo_class_disabled(finder, base_node, selector, spec); + return !modest_finder_selector_sub_type_pseudo_class_disabled(finder, base_node, selector, spec); } bool modest_finder_selector_sub_type_pseudo_class_first_child(modest_finder_t* finder, myhtml_tree_node_t* base_node, mycss_selectors_entry_t* selector, mycss_selectors_specificity_t* spec) @@ -692,7 +692,7 @@ bool modest_finder_selector_sub_type_pseudo_class_optional(modest_finder_t* find base_node->tag_id == MyHTML_TAG_TEXTAREA) { if(base_node->token) - return ~modest_finder_match_attribute_only_key(base_node->token->attr_first, "required", 8); + return !modest_finder_match_attribute_only_key(base_node->token->attr_first, "required", 8); else return true; } @@ -738,7 +738,7 @@ bool modest_finder_selector_sub_type_pseudo_class_read_write(modest_finder_t* fi if(modest_finder_match_attribute_only_key(base_node->token->attr_first, "readonly", 8)) return false; - return ~modest_finder_selector_sub_type_pseudo_class_disabled(finder, base_node, selector, spec); + return !modest_finder_selector_sub_type_pseudo_class_disabled(finder, base_node, selector, spec); } return false; diff --git a/source/modest/finder/thread.c b/source/modest/finder/thread.c index 87276e5..9ca10a2 100644 --- a/source/modest/finder/thread.c +++ b/source/modest/finder/thread.c @@ -227,6 +227,7 @@ modest_finder_thread_context_t * modest_finder_thread_create_context(modest_find mcobject_async_node_delete(finder_thread->entry_obj, ctx[i].entry_node_id); } + myhtml_free(ctx); return NULL; } } @@ -246,6 +247,7 @@ modest_finder_thread_context_t * modest_finder_thread_create_context(modest_find mcobject_async_node_delete(finder_thread->declaration_obj, ctx[i].declaration_node_id); } + myhtml_free(ctx); return NULL; } } diff --git a/source/modest/style/map.c b/source/modest/style/map.c index 47990b5..9a355fa 100644 --- a/source/modest/style/map.c +++ b/source/modest/style/map.c @@ -57,7 +57,6 @@ void modest_style_map_collate_declaration_padding(modest_t* modest, myhtml_tree_ return; mycss_values_shorthand_four_t *val_four = (mycss_values_shorthand_four_t*)decl->value; - mycss_declaration_t* declaration = modest->mycss_entry->declaration; if(val_four->two == NULL) { modest_style_map_collate_declaration_for_all(modest, node, val_four->one, MyCSS_PROPERTY_TYPE_PADDING_TOP, spec); @@ -92,7 +91,6 @@ void modest_style_map_collate_declaration_margin(modest_t* modest, myhtml_tree_n return; mycss_values_shorthand_four_t *val_four = (mycss_values_shorthand_four_t*)decl->value; - mycss_declaration_t* declaration = modest->mycss_entry->declaration; if(val_four->two == NULL) { modest_style_map_collate_declaration_for_all(modest, node, val_four->one, MyCSS_PROPERTY_TYPE_MARGIN_LEFT, spec); @@ -127,7 +125,6 @@ void modest_style_map_collate_declaration_border_width(modest_t* modest, myhtml_ return; mycss_values_shorthand_four_t *val_four = (mycss_values_shorthand_four_t*)decl->value; - mycss_declaration_t* declaration = modest->mycss_entry->declaration; if(val_four->two == NULL) { modest_style_map_collate_declaration_for_all(modest, node, val_four->one, MyCSS_PROPERTY_TYPE_BORDER_TOP_WIDTH, spec); diff --git a/source/mycss/convert.c b/source/mycss/convert.c index 1422fd2..724fe13 100644 --- a/source/mycss/convert.c +++ b/source/mycss/convert.c @@ -37,7 +37,7 @@ size_t mycss_convert_data_to_double(const char *data, size_t size, double *retur *return_num = 0.0f; switch (data[offset]) { - case '-': is_negative = true; + case '-': is_negative = true; /* fall through */ case '+': offset++; } @@ -108,7 +108,7 @@ size_t mycss_convert_data_to_double(const char *data, size_t size, double *retur { ++offset; - if(offset >= size || ((data[offset] != '-' || data[offset] != '+') && + if(offset >= size || ((data[offset] != '-' || data[offset] != '+') || (data[offset] < '0' || data[offset] > '9'))) { offset--; } @@ -117,7 +117,7 @@ size_t mycss_convert_data_to_double(const char *data, size_t size, double *retur is_negative = false; switch(data[offset]) { - case '-': is_negative = true; + case '-': is_negative = true; /* fall through */ case '+': offset++; } diff --git a/source/mycss/declaration/init.c b/source/mycss/declaration/init.c index 6572ef9..056e14c 100644 --- a/source/mycss/declaration/init.c +++ b/source/mycss/declaration/init.c @@ -142,6 +142,7 @@ mycss_declaration_entry_t * mycss_declaration_parse(mycss_declaration_t* declara if(out_status) *out_status = status; + entry->token_ready_callback = tmp_token_ready_callback; return NULL; } diff --git a/source/mycss/declaration/serialization.c b/source/mycss/declaration/serialization.c index a0a1009..508b36b 100644 --- a/source/mycss/declaration/serialization.c +++ b/source/mycss/declaration/serialization.c @@ -335,9 +335,7 @@ bool mycss_declaration_serialization_font(mycss_entry_t* entry, mycss_declaratio } if(font->family) { - if(set_ws == false) - set_ws = true; - else + if(set_ws == true) callback(" ", 1, context); mycss_declaration_serialization_font_family(entry, font->family, callback, context); @@ -381,7 +379,7 @@ bool mycss_declaration_serialization_border_radius(mycss_entry_t* entry, mycss_d } if(value->four && ((mycss_values_shorthand_two_type_t*)(value->four->value))->one) { - if(o_e) callback(" ", 1, context); else o_e = true; + if(o_e) callback(" ", 1, context); short_two_type = value->four->value; mycss_property_serialization_value(short_two_type->type_one, short_two_type->one, callback, context); @@ -399,7 +397,9 @@ bool mycss_declaration_serialization_border_radius(mycss_entry_t* entry, mycss_d if(value->two && ((mycss_values_shorthand_two_type_t*)(value->two->value))->two) { if(o_e == false) callback(" / ", 3, context); - if(o_e) callback(" ", 1, context); else o_e = true; + else callback(" ", 1, context); + + o_e = true; short_two_type = value->two->value; mycss_property_serialization_value(short_two_type->type_two, short_two_type->two, callback, context); @@ -407,7 +407,9 @@ bool mycss_declaration_serialization_border_radius(mycss_entry_t* entry, mycss_d if(value->three && ((mycss_values_shorthand_two_type_t*)(value->three->value))->two) { if(o_e == false) callback(" / ", 3, context); - if(o_e) callback(" ", 1, context); else o_e = true; + else callback(" ", 1, context); + + o_e = true; short_two_type = value->three->value; mycss_property_serialization_value(short_two_type->type_two, short_two_type->two, callback, context); @@ -415,7 +417,7 @@ bool mycss_declaration_serialization_border_radius(mycss_entry_t* entry, mycss_d if(value->four && ((mycss_values_shorthand_two_type_t*)(value->four->value))->two) { if(o_e == false) callback(" / ", 3, context); - if(o_e) callback(" ", 1, context); else o_e = true; + else callback(" ", 1, context); short_two_type = value->four->value; mycss_property_serialization_value(short_two_type->type_two, short_two_type->two, callback, context); @@ -599,7 +601,8 @@ bool mycss_declaration_serialization_background_position(mycss_entry_t* entry, m } if(position->four.type) { - if(o_e) callback(" ", 1, context); else o_e = true; + if(o_e) callback(" ", 1, context); + mycss_property_serialization_value(position->four.type, position->four.length, callback, context); } diff --git a/source/mycss/declaration/state.c b/source/mycss/declaration/state.c index 9f2c583..04f0512 100644 --- a/source/mycss/declaration/state.c +++ b/source/mycss/declaration/state.c @@ -74,7 +74,7 @@ bool mycss_declaration_state_ident(mycss_entry_t* entry, mycss_token_t* token, b bool mycss_declaration_state_colon_before_important(mycss_entry_t* entry, mycss_token_t* token, bool last_response) { if(token->type == MyCSS_TOKEN_TYPE_WHITESPACE) - return token; + return true; else if(token->type == MyCSS_TOKEN_TYPE_SEMICOLON) { entry->parser = mycss_declaration_state_data; return true; diff --git a/source/mycss/mycss.c b/source/mycss/mycss.c index fda514d..ab307ff 100644 --- a/source/mycss/mycss.c +++ b/source/mycss/mycss.c @@ -203,9 +203,6 @@ myhtml_encoding_t mycss_encoding_check_charset_rule(const char* css, size_t size size_t begin = 10; size_t length = begin; - if(begin >= size) - return MyHTML_ENCODING_UTF_8; - while(length < size) { if(css[length] == '"') { diff --git a/source/mycss/namespace/init.c b/source/mycss/namespace/init.c index 7283328..017449f 100644 --- a/source/mycss/namespace/init.c +++ b/source/mycss/namespace/init.c @@ -112,9 +112,15 @@ void mycss_namespace_entry_append_to_current(mycss_namespace_t* ns, mycss_namesp mycss_status_t mycss_namespace_stylesheet_init(mycss_namespace_stylesheet_t* ns_stylesheet, mycss_entry_t* entry) { - ns_stylesheet->name_tree = mctree_create(14); + ns_stylesheet->name_tree = mctree_create(14); + if(ns_stylesheet->name_tree == NULL) + return MyCSS_STATUS_ERROR_NAMESPACE_CREATE; + ns_stylesheet->ns_id_counter = 0; + ns_stylesheet->entry_default = mycss_namespace_entry_create(entry->ns); + if(ns_stylesheet->entry_default == NULL) + return MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_CREATE; mycss_namespace_entry_clean(ns_stylesheet->entry_default); mycss_namespace_entry_clean(&ns_stylesheet->entry_undef); @@ -132,9 +138,6 @@ mycss_status_t mycss_namespace_stylesheet_init(mycss_namespace_stylesheet_t* ns_ myhtml_string_append(ns_stylesheet->entry_any.name, "*", 1); ns_stylesheet->entry_any.ns_id = MyHTML_NAMESPACE_ANY; - if(ns_stylesheet->entry_default == NULL) - return MyCSS_STATUS_ERROR_NAMESPACE_ENTRIES_CREATE; - mycss_namespace_stylesheet_init_default(ns_stylesheet, entry, NULL, 0, MyHTML_NAMESPACE_ANY); return MyCSS_STATUS_OK; diff --git a/source/mycss/namespace/parser.c b/source/mycss/namespace/parser.c index f00f88e..c442316 100644 --- a/source/mycss/namespace/parser.c +++ b/source/mycss/namespace/parser.c @@ -72,6 +72,9 @@ void mycss_namespace_parser_end(mycss_entry_t* entry, mycss_token_t* token) void mycss_namespace_parser_expectations_error(mycss_entry_t* entry, mycss_token_t* token) { + if(entry->ns->entry_last == NULL) + return; + mycss_namespace_entry_t *ns_entry = entry->ns->entry_last; mycss_namespace_entry_destroy(ns_entry, entry, false); @@ -83,10 +86,7 @@ void mycss_namespace_parser_expectations_error(mycss_entry_t* entry, mycss_token entry->ns->entry_last = NULL; } - if(ns_entry) - mcobject_free(entry->ns->mcobject_entries, ns_entry); - - printf("Expectations error: Namespace!\n"); + mcobject_free(entry->ns->mcobject_entries, ns_entry); } diff --git a/source/mycss/property/parser.c b/source/mycss/property/parser.c index 93e099b..3c0e4a6 100644 --- a/source/mycss/property/parser.c +++ b/source/mycss/property/parser.c @@ -1106,12 +1106,8 @@ bool mycss_property_parser_border_color(mycss_entry_t* entry, mycss_token_t* tok unsigned int value_type = 0; if(mycss_property_shared_default(entry, token, &value_type, &str)) { - if(value == NULL) { - dec_entry->value_type = value_type; - return mycss_property_parser_destroy_string(&str, mycss_property_shared_switch_to_find_important(entry)); - } - - return mycss_property_parser_destroy_string(&str, mycss_property_shared_switch_to_parse_error(entry)); + dec_entry->value_type = value_type; + return mycss_property_parser_destroy_string(&str, mycss_property_shared_switch_to_find_important(entry)); } mycss_declaration_entry_t* shared_declr; @@ -2055,7 +2051,7 @@ bool mycss_property_parser_font_step_one(mycss_entry_t* entry, mycss_token_t* to if(mycss_property_shared_font_style(entry, token, &value_type, &str)) { - if( font->style) + if(font->style) return mycss_property_parser_destroy_string(&str, mycss_property_shared_switch_to_parse_error(entry)); font->style = mycss_declaration_entry_create(entry->declaration, NULL); diff --git a/source/mycss/property/shared.c b/source/mycss/property/shared.c index bfe7727..25b77b4 100644 --- a/source/mycss/property/shared.c +++ b/source/mycss/property/shared.c @@ -375,6 +375,7 @@ bool mycss_property_shared_text_decoration_line(mycss_entry_t* entry, mycss_toke *value_type = text_dec_type; return true; } + /* fall through */ default: *value_type = MyCSS_PROPERTY_VALUE_UNDEF; diff --git a/source/mycss/selectors/function_parser.c b/source/mycss/selectors/function_parser.c index 0f37d08..3850954 100644 --- a/source/mycss/selectors/function_parser.c +++ b/source/mycss/selectors/function_parser.c @@ -137,10 +137,10 @@ bool mycss_selectors_function_parser_not_or_matches_or_current_parser(mycss_entr selectors_list = mycss_selectors_parser_check_selector_list(selectors, selectors_list); if(selectors_list == NULL) { - if(selectors->entry_last) + if(selectors->entry_last) { selectors->entry_last->value = NULL; - - selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; + selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; + } } else if((selectors_list->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) && selectors->entry_last) { selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; @@ -198,10 +198,10 @@ bool mycss_selectors_function_parser_has(mycss_entry_t* entry, mycss_token_t* to selectors_list = mycss_selectors_parser_check_selector_list(selectors, selectors_list); if(selectors_list == NULL) { - if(selectors->entry_last) + if(selectors->entry_last) { selectors->entry_last->value = NULL; - - selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; + selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; + } } else if((selectors_list->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) && selectors->entry_last) { selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; @@ -324,9 +324,8 @@ bool mycss_selectors_function_parser_nth_with_selectors_need_of_after(mycss_entr if(selectors_list == NULL) { if(selectors->entry_last) { mycss_selector_value_an_plus_b(selectors->entry_last->value)->of = NULL; + selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } - - selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; } else if((selectors_list->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) && selectors->entry_last) { selectors->entry_last->flags |= MyCSS_SELECTORS_FLAGS_SELECTOR_BAD; diff --git a/source/mycss/selectors/myosi.h b/source/mycss/selectors/myosi.h index 81be9ea..e3d7e36 100644 --- a/source/mycss/selectors/myosi.h +++ b/source/mycss/selectors/myosi.h @@ -213,7 +213,7 @@ struct mycss_selectors { struct mycss_selectors_entry { mycss_selectors_type_t type; - int sub_type; + unsigned int sub_type; mycss_selectors_flags_t flags; mycss_namespace_entry_t* ns_entry; diff --git a/source/mycss/selectors/serialization.c b/source/mycss/selectors/serialization.c index 81498f2..00933ad 100644 --- a/source/mycss/selectors/serialization.c +++ b/source/mycss/selectors/serialization.c @@ -228,6 +228,10 @@ bool mycss_selectors_serialization_selector(mycss_selectors_t* selectors, mycss_ break; } + case MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_UNKNOWN: + callback("^UST", 4, context); + break; + default: break; } @@ -263,9 +267,6 @@ bool mycss_selectors_serialization_selector(mycss_selectors_t* selectors, mycss_ } }; - if(selector->sub_type == MyCSS_SELECTORS_SUB_TYPE_UNKNOWN) - callback("^UST", 4, context); - if(selector->flags & MyCSS_SELECTORS_FLAGS_SELECTOR_BAD) callback("^B", 2, context); diff --git a/source/mycss/tokenizer.c b/source/mycss/tokenizer.c index e6fd62a..522c60d 100644 --- a/source/mycss/tokenizer.c +++ b/source/mycss/tokenizer.c @@ -124,6 +124,9 @@ size_t mycss_tokenizer_state_set_current_buffer_for_continue(mycss_entry_t* entr while(buffer && buffer->offset > position) buffer = buffer->prev; + if(buffer == NULL) + return 0; + entry->current_buffer = buffer; return (position - buffer->offset); diff --git a/source/mycss/values/color.c b/source/mycss/values/color.c index de3c488..cb22714 100644 --- a/source/mycss/values/color.c +++ b/source/mycss/values/color.c @@ -63,7 +63,7 @@ mycss_values_color_id_t mycss_values_color_id_by_name(const char *name, size_t l const char * mycss_values_color_name_by_id(mycss_values_color_id_t color_id, size_t *length) { - if(color_id > MyCSS_VALUES_COLOR_ID_LAST_ENTRY) { + if(color_id >= MyCSS_VALUES_COLOR_ID_LAST_ENTRY) { if(length) *length = 0; @@ -119,7 +119,7 @@ mycss_values_color_function_id_t mycss_values_color_function_id_by_name(const ch const char * mycss_values_color_function_name_by_id(mycss_values_color_function_id_t color_function_id, size_t *length) { - if(color_function_id > MyCSS_VALUES_COLOR_FUNCTION_ID_LAST_ENTRY) { + if(color_function_id >= MyCSS_VALUES_COLOR_FUNCTION_ID_LAST_ENTRY) { if(length) *length = 0; diff --git a/source/mycss/values/color_parser.c b/source/mycss/values/color_parser.c index 9cb1c92..661da53 100644 --- a/source/mycss/values/color_parser.c +++ b/source/mycss/values/color_parser.c @@ -284,6 +284,7 @@ bool mycss_values_color_parser_rgb_before_alpha_percentage(mycss_entry_t* entry, entry->parser = mycss_values_color_parser_rgb_alpha_percentage; return true; } + /* fall through */ default: mycss_values_color_parser_switch_parser(entry); @@ -432,6 +433,7 @@ bool mycss_values_color_parser_rgb_before_alpha_number(mycss_entry_t* entry, myc entry->parser = mycss_values_color_parser_rgb_alpha_number; return true; } + /* fall through */ default: mycss_values_color_parser_switch_parser(entry); @@ -640,6 +642,7 @@ bool mycss_values_color_parser_hsl_before_alpha(mycss_entry_t* entry, mycss_toke entry->parser = mycss_values_color_parser_hsl_alpha; return true; } + /* fall through */ default: mycss_values_color_parser_switch_parser(entry); @@ -911,6 +914,7 @@ bool mycss_values_color_parser_hwb_before_alpha(mycss_entry_t* entry, mycss_toke entry->parser = mycss_values_color_parser_hwb_alpha; return true; } + /* fall through */ default: mycss_values_color_parser_switch_parser(entry); @@ -1000,6 +1004,7 @@ bool mycss_values_color_parser_gray_before_alpha(mycss_entry_t* entry, mycss_tok entry->parser = mycss_values_color_parser_gray_alpha; return true; } + /* fall through */ default: mycss_values_color_parser_switch_parser(entry); diff --git a/source/mycss/values/serialization.c b/source/mycss/values/serialization.c index 99a73c7..f46b2e4 100644 --- a/source/mycss/values/serialization.c +++ b/source/mycss/values/serialization.c @@ -586,7 +586,7 @@ void mycss_values_serialization_border(mycss_values_border_t* border, mycss_call } if(border->color) { - if(o_e) callback(" ", 1, context); else o_e = true; + if(o_e) callback(" ", 1, context); mycss_declaration_serialization_entry_only_value(NULL, border->color, callback, context); } } diff --git a/source/myfont/cmap.c b/source/myfont/cmap.c index a101404..0bce7c2 100644 --- a/source/myfont/cmap.c +++ b/source/myfont/cmap.c @@ -232,7 +232,7 @@ myfont_status_t myfont_load_table_cmap(myfont_font_t *mf) if(table_offset == 0) return MyFONT_STATUS_OK; - if(mf->file_size < (table_offset + 4)) + if((table_offset + 4) > mf->file_size) return MyFONT_STATUS_ERROR_TABLE_UNEXPECTED_ENDING; /* get current data */ diff --git a/source/myfont/glyf.c b/source/myfont/glyf.c index 856ad9f..2b5851e 100644 --- a/source/myfont/glyf.c +++ b/source/myfont/glyf.c @@ -66,14 +66,14 @@ myfont_status_t myfont_glyf_load_data(myfont_font_t *mf, myfont_table_glyph_t *g { memset(&glyph->head, 0, sizeof(myfont_table_glyf_head_t)); - /* get current data */ - uint8_t *data = &mf->file_data[offset]; - // load head offset += 10; if(offset > mf->file_size) return MyFONT_STATUS_ERROR_TABLE_UNEXPECTED_ENDING; + /* get current data */ + uint8_t *data = &mf->file_data[offset]; + glyph->head.numberOfContours = myfont_read_16(&data); glyph->head.xMin = myfont_read_16(&data); glyph->head.yMin = myfont_read_16(&data); diff --git a/source/myfont/myfont.c b/source/myfont/myfont.c index 4c021d8..b3de3a6 100644 --- a/source/myfont/myfont.c +++ b/source/myfont/myfont.c @@ -22,11 +22,12 @@ const char myfont_table_name[][5] = { "cmap", "head", "hhea", "hmtx", "maxp", "name", - "OS/2", "post", "cvt ", "fpgm", "glyf", "loca", - "prep", "CFF ", "VORG", "EBDT", "EBLC", "EBSC", - "BASE", "GDEF", "GPOS", "GSUB", "JSTF", "DSIG", - "gasp", "hdmx", "kern", "LTSH", "PCLT", "VDMX", - "vhea", "vmtx" + "OS/2", "post", "cvt" , "fpgm", "glyf", "loca", + "prep", "gasp", "CFF" , "VORG", "SVG" , "EBDT", + "EBLC", "EBSC", "CBDT", "CBLC", "BASE", "GDEF", + "GPOS", "GSUB", "JSTF", "MATH", "DSIG", "hdmx", + "kern", "LTSH", "PCLT", "VDMX", "vhea", "vmtx", + "COLR", "CPAL" }; myfont_font_t * myfont_create(void) @@ -152,7 +153,7 @@ myfont_status_t myfont_load(myfont_font_t *mf, const char *filepath) if(mf->file_size < 12) return MyFONT_STATUS_ERROR_TABLE_UNEXPECTED_ENDING; - uint8_t *data = (uint8_t*)mf->file_data; + uint8_t *data = mf->file_data; mf->header.version_major = myfont_read_u16(&data); mf->header.version_minor = myfont_read_u16(&data); @@ -286,7 +287,7 @@ void myfont_font_print_exists_table(myfont_font_t *mf, FILE *file) { size_t i; for(i = 0; i < MyFONT_TKEY_LAST_KEY; i++) - { + { if(mf->cache.tables_offset[i]) { fprintf(file, "%s = %u\n", myfont_table_name[i], mf->cache.tables_offset[i]); } diff --git a/source/myhtml/encoding.c b/source/myhtml/encoding.c index 1c7560a..078ac5c 100644 --- a/source/myhtml/encoding.c +++ b/source/myhtml/encoding.c @@ -398,7 +398,7 @@ unsigned long myhtml_encoding_index_gb18030_ranges_code_point(unsigned long poin return 0xe7c7; // step 3 - unsigned long offset = sizeof(myhtml_encoding_map_gb18030_ranges) / sizeof(unsigned long); + unsigned long offset = sizeof(myhtml_encoding_map_gb18030_ranges) / (sizeof(unsigned long) * 2); unsigned long code_point_offset = 0; while (offset) { diff --git a/source/myhtml/myhtml.c b/source/myhtml/myhtml.c index 7edeaf1..6b3bbd2 100644 --- a/source/myhtml/myhtml.c +++ b/source/myhtml/myhtml.c @@ -1434,35 +1434,50 @@ void myhtml_queue_add(myhtml_tree_t *tree, size_t begin, myhtml_token_node_t* to } } - qnode->token = token; - #ifndef MyHTML_BUILD_WITHOUT_THREADS if(tree->flags & MyHTML_TREE_FLAGS_SINGLE_MODE) { - myhtml_parser_worker(0, qnode); - myhtml_parser_stream(0, qnode); + if(qnode) { + qnode->token = token; + + myhtml_parser_worker(0, qnode); + myhtml_parser_stream(0, qnode); + } tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread, tree->queue, 4, NULL); } else { + if(qnode) + qnode->token = token; + tree->current_qnode = mythread_queue_node_malloc_round(tree->myhtml->thread, tree->queue_entry, NULL); } #else - myhtml_parser_worker(0, qnode); - myhtml_parser_stream(0, qnode); + f(qnode) { + qnode->token = token; + + myhtml_parser_worker(0, qnode); + myhtml_parser_stream(0, qnode); + } tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread, tree->queue, 4, NULL); #endif /* MyHTML_BUILD_WITHOUT_THREADS */ + if(tree->current_qnode == NULL) { + // TODO: add return status + return; + } + tree->current_qnode->tree = tree; tree->current_qnode->prev = qnode; - if(qnode) + if(qnode && token) myhtml_tokenizer_calc_current_namespace(tree, token); + // TODO: add check created node myhtml_token_node_malloc(tree->token, tree->current_token_node, tree->token->mcasync_token_id); tree->current_token_node->raw_begin = tree->current_token_node->element_begin = (tree->global_offset + begin); diff --git a/source/myhtml/tree.c b/source/myhtml/tree.c index cd5e929..6bf7772 100644 --- a/source/myhtml/tree.c +++ b/source/myhtml/tree.c @@ -71,14 +71,6 @@ myhtml_status_t myhtml_tree_init(myhtml_tree_t* tree, myhtml_t* myhtml) if(mcstatus) return MyHTML_STATUS_TREE_ERROR_MCOBJECT_INIT; - if(status) { - myhtml->parse_state_func = NULL; - myhtml->insertion_func = NULL; - myhtml->thread = NULL; - - return status; - } - tree->mchar = mchar_async_create(128, (4096 * 5)); tree->active_formatting = myhtml_tree_active_formatting_init(tree); tree->open_elements = myhtml_tree_open_elements_init(tree); @@ -880,7 +872,7 @@ void myhtml_tree_list_insert_by_index(myhtml_tree_list_t* list, myhtml_tree_node myhtml_tree_node_t** node_list = list->list; - memmove(&node_list[(index + 1)], &node_list[index], sizeof(myhtml_tree_node_t**) * (list->length - index)); + memmove(&node_list[(index + 1)], &node_list[index], sizeof(myhtml_tree_node_t*) * (list->length - index)); list->list[index] = node; list->length++; @@ -961,7 +953,7 @@ void myhtml_tree_open_elements_remove(myhtml_tree_t* tree, myhtml_tree_node_t* n if(list[el_idx] == node) { - memmove(&list[el_idx], &list[el_idx + 1], sizeof(myhtml_tree_node_t**) * (tree->open_elements->length - el_idx)); + memmove(&list[el_idx], &list[el_idx + 1], sizeof(myhtml_tree_node_t*) * (tree->open_elements->length - el_idx)); tree->open_elements->length--; break; @@ -1451,7 +1443,7 @@ void myhtml_tree_active_formatting_remove(myhtml_tree_t* tree, myhtml_tree_node_ if(list[el_idx] == node) { - memmove(&list[el_idx], &list[el_idx + 1], sizeof(myhtml_tree_node_t**) * (tree->active_formatting->length - el_idx)); + memmove(&list[el_idx], &list[el_idx + 1], sizeof(myhtml_tree_node_t*) * (tree->active_formatting->length - el_idx)); tree->active_formatting->length--; break; @@ -1469,7 +1461,7 @@ void myhtml_tree_active_formatting_remove_by_index(myhtml_tree_t* tree, size_t i { myhtml_tree_node_t** list = tree->active_formatting->list; - memmove(&list[idx], &list[idx + 1], sizeof(myhtml_tree_node_t**) * (tree->active_formatting->length - idx)); + memmove(&list[idx], &list[idx + 1], sizeof(myhtml_tree_node_t*) * (tree->active_formatting->length - idx)); tree->active_formatting->length--; #ifdef DEBUG_MODE diff --git a/source/myhtml/utils.c b/source/myhtml/utils.c index 2134270..eb5c741 100644 --- a/source/myhtml/utils.c +++ b/source/myhtml/utils.c @@ -54,14 +54,8 @@ static const unsigned char myhtml_utils_chars_map[] = { size_t myhtml_strncasecmp(const char* str1, const char* str2, size_t size) { - if(str1 == NULL) { - if(str2 == NULL) - return 0; - - return 1; - } - else if(str2 == NULL) { - if(str1 == NULL) + if(str1 == NULL || str2 == NULL) { + if(str1 == str2) return 0; return 1; @@ -86,14 +80,8 @@ size_t myhtml_strncasecmp(const char* str1, const char* str2, size_t size) size_t myhtml_strcasecmp(const char* str1, const char* str2) { - if(str1 == NULL) { - if(str2 == NULL) - return 0; - - return 1; - } - else if(str2 == NULL) { - if(str1 == NULL) + if(str1 == NULL || str2 == NULL) { + if(str1 == str2) return 0; return 1; @@ -119,14 +107,8 @@ size_t myhtml_strcasecmp(const char* str1, const char* str2) size_t myhtml_strncmp(const char* str1, const char* str2, size_t size) { - if(str1 == NULL) { - if(str2 == NULL) - return 0; - - return 1; - } - else if(str2 == NULL) { - if(str1 == NULL) + if(str1 == NULL || str2 == NULL) { + if(str1 == str2) return 0; return 1; @@ -151,14 +133,8 @@ size_t myhtml_strncmp(const char* str1, const char* str2, size_t size) size_t myhtml_strcmp(const char* str1, const char* str2) { - if(str1 == NULL) { - if(str2 == NULL) - return 0; - - return 1; - } - else if(str2 == NULL) { - if(str1 == NULL) + if(str1 == NULL || str2 == NULL) { + if(str1 == str2) return 0; return 1; @@ -184,14 +160,8 @@ size_t myhtml_strcmp(const char* str1, const char* str2) size_t myhtml_strcmp_ws(const char* str1, const char* str2) { - if(str1 == NULL) { - if(str2 == NULL) - return 0; - - return 1; - } - else if(str2 == NULL) { - if(str1 == NULL) + if(str1 == NULL || str2 == NULL) { + if(str1 == str2) return 0; return 1; diff --git a/source/myhtml/utils/mcobject_async.c b/source/myhtml/utils/mcobject_async.c index c62b4d8..21e36e8 100644 --- a/source/myhtml/utils/mcobject_async.c +++ b/source/myhtml/utils/mcobject_async.c @@ -354,13 +354,20 @@ void mcobject_async_node_delete(mcobject_async_t *mcobj_async, size_t node_idx) while (chunk) { if(mcobj_async->chunk_cache_length >= mcobj_async->chunk_cache_size) { - mcobj_async->chunk_cache_size <<= 1; + size_t new_size = mcobj_async->chunk_cache_size << 1; mcobject_async_chunk_t **tmp = (mcobject_async_chunk_t**)myhtml_realloc(mcobj_async->chunk_cache, - sizeof(mcobject_async_chunk_t*) * mcobj_async->chunk_cache_size); + sizeof(mcobject_async_chunk_t*) * new_size); - if(tmp) + if(tmp) { + mcobj_async->chunk_cache_size = new_size; mcobj_async->chunk_cache = tmp; + } + else { + // TODO: add return status + mcsync_unlock(mcobj_async->mcsync); + return; + } } mcobj_async->chunk_cache[ mcobj_async->chunk_cache_length ] = chunk; diff --git a/source/myhtml/utils/mctree.h b/source/myhtml/utils/mctree.h index e3c2b42..bd3054f 100644 --- a/source/myhtml/utils/mctree.h +++ b/source/myhtml/utils/mctree.h @@ -45,8 +45,8 @@ extern "C" { #define mctree_node_add(mctree) \ mctree->nodes_length++; \ - if(mctree->nodes_length == mctree->nodes_size) { \ - mctree->nodes_size += 4096; \ + if(mctree->nodes_length >= mctree->nodes_size) { \ + mctree->nodes_size = mctree->nodes_length + 4096; \ mctree->nodes = (mctree_node_t*)myhtml_realloc(mctree->nodes, \ sizeof(mctree_node_t) * mctree->nodes_size); \ } \ diff --git a/test/mycss/declaration.c b/test/mycss/declaration.c index 80f8c77..29ab722 100644 --- a/test/mycss/declaration.c +++ b/test/mycss/declaration.c @@ -65,10 +65,23 @@ test_res_t test_load_file(const char* filename) exit(EXIT_FAILURE); } - fseek(fh, 0L, SEEK_END); + if(fseek(fh, 0L, SEEK_END) != 0) { + fprintf(stderr, "Can't set position (fseek) in file: %s\n", filename); + exit(EXIT_FAILURE); + } + long size = ftell(fh); - fseek(fh, 0L, SEEK_SET); + + if(fseek(fh, 0L, SEEK_SET) != 0) { + fprintf(stderr, "Can't set position (fseek) in file: %s\n", filename); + exit(EXIT_FAILURE); + } + if(size <= 0) { + fprintf(stderr, "Can't get file size or file is empty: %s\n", filename); + exit(EXIT_FAILURE); + } + char *file_data = (char*)malloc(size + 1); if(file_data == NULL) { fprintf(stderr, "Can't allocate mem for file: %s\n", filename); @@ -82,10 +95,6 @@ test_res_t test_load_file(const char* filename) } fclose(fh); - - if(size < 0) { - size = 0; - } return (test_res_t){file_data, (size_t)size}; } @@ -221,7 +230,10 @@ test_stat_t test_read_dir(const char* dir_path, test_read_dir_callback_f callbac { sprintf(&path[path_len], "/%s", ent->d_name); - stat(path, &path_stat); + if(stat(path, &path_stat) != 0) { + fprintf(stderr, "Can't get status for file: %s\n", path); + exit(EXIT_FAILURE); + } if(ent->d_name[0] == '.' || S_ISDIR(path_stat.st_mode)) continue;