From 19a99450bc8238e9cd7d5148f16c7f99e6430715 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 6 Jul 2018 15:38:31 +0200 Subject: [PATCH 1/6] Fix CID 1164611 (Uninitialized scalar field) Signed-off-by: Stefan Weil --- src/wordrec/wordrec.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wordrec/wordrec.cpp b/src/wordrec/wordrec.cpp index 30936121..158bc6ce 100644 --- a/src/wordrec/wordrec.cpp +++ b/src/wordrec/wordrec.cpp @@ -134,7 +134,8 @@ Wordrec::Wordrec() : BOOL_MEMBER(save_alt_choices, true, "Save alternative paths found during chopping" " and segmentation search", - params()) { + params()), + pass2_ok_split(0.0f) { prev_word_best_choice_ = nullptr; language_model_.reset(new LanguageModel(&get_fontinfo_table(), &(getDict()))); From 430dc5c0b6e4444a8e23db139314081cebee440a Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 6 Jul 2018 15:45:34 +0200 Subject: [PATCH 2/6] Fix CID 1164612 (Uninitialized scalar field) Signed-off-by: Stefan Weil --- src/textord/gap_map.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/textord/gap_map.cpp b/src/textord/gap_map.cpp index 719a6118..2a7e7e64 100644 --- a/src/textord/gap_map.cpp +++ b/src/textord/gap_map.cpp @@ -11,13 +11,11 @@ #include "statistc.h" #include "gap_map.h" -#define EXTERN -EXTERN BOOL_VAR (gapmap_debug, FALSE, "Say which blocks have tables"); -EXTERN BOOL_VAR (gapmap_use_ends, FALSE, -"Use large space at start and end of rows"); -EXTERN BOOL_VAR (gapmap_no_isolated_quanta, FALSE, +BOOL_VAR(gapmap_debug, FALSE, "Say which blocks have tables"); +BOOL_VAR(gapmap_use_ends, FALSE, "Use large space at start and end of rows"); +BOOL_VAR(gapmap_no_isolated_quanta, FALSE, "Ensure gaps not less than 2quanta wide"); -EXTERN double_VAR (gapmap_big_gaps, 1.75, "xht multiplier"); +double_VAR(gapmap_big_gaps, 1.75, "xht multiplier"); /************************************************************************* * A block gap map is a quantised histogram of whitespace regions in the @@ -74,6 +72,8 @@ GAPMAP::GAPMAP( //Constructor } } if ((total_rows < 3) || (min_left >= max_right)) { + bucket_size = 0; + map_max = 0; total_rows = 0; min_left = max_right = 0; return; From 37f82824f55f48d88a854b6809dc5e94c0a730d9 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 6 Jul 2018 15:56:11 +0200 Subject: [PATCH 3/6] Fix CID 1164616 (Uninitialized scalar field) Signed-off-by: Stefan Weil --- src/ccstruct/coutln.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ccstruct/coutln.h b/src/ccstruct/coutln.h index 165e53e0..6de78283 100644 --- a/src/ccstruct/coutln.h +++ b/src/ccstruct/coutln.h @@ -72,10 +72,11 @@ struct Pix; ELISTIZEH (C_OUTLINE) class DLLSYM C_OUTLINE:public ELIST_LINK { public: - C_OUTLINE() { //empty constructor - steps = nullptr; - offsets = nullptr; - } + C_OUTLINE() { + stepcount = 0; + steps = nullptr; + offsets = nullptr; + } C_OUTLINE( //constructor CRACKEDGE *startpt, //from edge detector ICOORD bot_left, //bounding box //length of loop From 8582ee097c7587e4c016180b63b953c566df76a5 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 6 Jul 2018 16:53:24 +0200 Subject: [PATCH 4/6] Fix CID 1164618 (Uninitialized scalar field) Fix it by combining constructor and Init method. Signed-off-by: Stefan Weil --- src/textord/cjkpitch.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/textord/cjkpitch.cpp b/src/textord/cjkpitch.cpp index 0703406e..1c19c4e1 100644 --- a/src/textord/cjkpitch.cpp +++ b/src/textord/cjkpitch.cpp @@ -915,11 +915,9 @@ void FPRow::FinalizeLargeChars() { class FPAnalyzer { public: - FPAnalyzer(): page_tr_(), rows_() { } + FPAnalyzer(ICOORD page_tr, TO_BLOCK_LIST *port_blocks); ~FPAnalyzer() { } - void Init(ICOORD page_tr, TO_BLOCK_LIST *port_blocks); - void Pass1Analyze() { for (size_t i = 0; i < rows_.size(); i++) rows_[i].Pass1Analyze(); } @@ -984,11 +982,14 @@ class FPAnalyzer { unsigned max_chars_per_row_; }; -void FPAnalyzer::Init(ICOORD page_tr, TO_BLOCK_LIST *port_blocks) { - page_tr_ = page_tr; - - TO_BLOCK_IT block_it; - block_it.set_to_list (port_blocks); +FPAnalyzer::FPAnalyzer(ICOORD page_tr, TO_BLOCK_LIST *port_blocks) +: page_tr_(page_tr), + num_tall_rows_(0), + num_bad_rows_(0), + num_empty_rows_(0), + max_chars_per_row_(0) +{ + TO_BLOCK_IT block_it(port_blocks); for (block_it.mark_cycle_pt(); !block_it.cycled_list(); block_it.forward()) { @@ -999,8 +1000,6 @@ void FPAnalyzer::Init(ICOORD page_tr, TO_BLOCK_LIST *port_blocks) { } } - num_empty_rows_ = 0; - max_chars_per_row_ = 0; for (block_it.mark_cycle_pt(); !block_it.cycled_list(); block_it.forward()) { TO_ROW_IT row_it = block_it.data()->get_rows(); @@ -1060,8 +1059,7 @@ void FPAnalyzer::EstimatePitch(bool pass1) { void compute_fixed_pitch_cjk(ICOORD page_tr, TO_BLOCK_LIST *port_blocks) { - FPAnalyzer analyzer; - analyzer.Init(page_tr, port_blocks); + FPAnalyzer analyzer(page_tr, port_blocks); if (analyzer.num_rows() == 0) return; analyzer.Pass1Analyze(); From 66b71e6b582dab57a34bbfab4791f240eab1c287 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 6 Jul 2018 17:12:12 +0200 Subject: [PATCH 5/6] Fix CID 1164621 (Uninitialized scalar field) Format also some comments. Signed-off-by: Stefan Weil --- src/textord/pitsync1.cpp | 89 ++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/src/textord/pitsync1.cpp b/src/textord/pitsync1.cpp index fc58e249..870f1d75 100644 --- a/src/textord/pitsync1.cpp +++ b/src/textord/pitsync1.cpp @@ -22,17 +22,12 @@ #include "pitsync1.h" ELISTIZE (FPSEGPT) CLISTIZE (FPSEGPT_LIST) -#define EXTERN -EXTERN -INT_VAR (pitsync_linear_version, 6, "Use new fast algorithm"); -EXTERN -double_VAR (pitsync_joined_edge, 0.75, -"Dist inside big blob for chopping"); -EXTERN -double_VAR (pitsync_offset_freecut_fraction, 0.25, -"Fraction of cut for free cuts"); -EXTERN -INT_VAR (pitsync_fake_depth, 1, "Max advance fake generation"); + +INT_VAR(pitsync_linear_version, 6, "Use new fast algorithm"); +double_VAR(pitsync_joined_edge, 0.75, "Dist inside big blob for chopping"); +double_VAR(pitsync_offset_freecut_fraction, 0.25, + "Fraction of cut for free cuts"); +INT_VAR(pitsync_fake_depth, 1, "Max advance fake generation"); /********************************************************************** * FPSEGPT::FPSEGPT @@ -63,7 +58,7 @@ FPSEGPT::FPSEGPT( //constructor **********************************************************************/ FPSEGPT::FPSEGPT ( //constructor -int16_t x //position +int16_t x //position ):xpos (x) { pred = nullptr; mean_sum = 0; @@ -83,17 +78,22 @@ int16_t x //position **********************************************************************/ FPSEGPT::FPSEGPT ( //constructor -int16_t x, //position +int16_t x, //position BOOL8 faking, //faking this one -int16_t offset, //dist to gap -int16_t region_index, //segment number -int16_t pitch, //proposed pitch -int16_t pitch_error, //allowed tolerance +int16_t offset, //dist to gap +int16_t region_index, //segment number +int16_t pitch, //proposed pitch +int16_t pitch_error, //allowed tolerance FPSEGPT_LIST * prev_list //previous segment -):xpos (x) { - int16_t best_fake; //on previous +) +: fake_count(0), + xpos(x), + mean_sum(0.0), + sq_sum(0.0) +{ + int16_t best_fake; //on previous FPSEGPT *segpt; //segment point - int32_t dist; //from prev segment + int32_t dist; //from prev segment double sq_dist; //squared distance double mean; //mean pitch double total; //total dists @@ -133,7 +133,6 @@ FPSEGPT_LIST * prev_list //previous segment pred = nullptr; //fail it } - /********************************************************************** * check_pitch_sync * @@ -144,28 +143,28 @@ FPSEGPT_LIST * prev_list //previous segment double check_pitch_sync( //find segmentation BLOBNBOX_IT *blob_it, //blobs to do - int16_t blob_count, //no of blobs - int16_t pitch, //pitch estimate - int16_t pitch_error, //tolerance + int16_t blob_count, //no of blobs + int16_t pitch, //pitch estimate + int16_t pitch_error, //tolerance STATS *projection, //vertical FPSEGPT_LIST *seg_list //output list ) { - int16_t x; //current coord - int16_t min_index; //blob number - int16_t max_index; //blob number - int16_t left_edge; //of word - int16_t right_edge; //of word - int16_t right_max; //max allowed x - int16_t min_x; //in this region + int16_t x; //current coord + int16_t min_index; //blob number + int16_t max_index; //blob number + int16_t left_edge; //of word + int16_t right_edge; //of word + int16_t right_max; //max allowed x + int16_t min_x; //in this region int16_t max_x; int16_t region_index; - int16_t best_region_index = 0; //for best result - int16_t offset; //dist to legal area - int16_t left_best_x; //edge of good region - int16_t right_best_x; //right edge - TBOX min_box; //bounding box - TBOX max_box; //bounding box - TBOX next_box; //box of next blob + int16_t best_region_index = 0; //for best result + int16_t offset; //dist to legal area + int16_t left_best_x; //edge of good region + int16_t right_best_x; //right edge + TBOX min_box; //bounding box + TBOX max_box; //bounding box + TBOX next_box; //box of next blob FPSEGPT *segpt; //segment point FPSEGPT_LIST *segpts; //points in a segment double best_cost; //best path @@ -362,17 +361,17 @@ double check_pitch_sync( //find segmentation void make_illegal_segment( //find segmentation FPSEGPT_LIST *prev_list, //previous segments - TBOX blob_box, //bounding box + TBOX blob_box, //bounding box BLOBNBOX_IT blob_it, //iterator - int16_t region_index, //number of segment - int16_t pitch, //pitch estimate - int16_t pitch_error, //tolerance + int16_t region_index, //number of segment + int16_t pitch, //pitch estimate + int16_t pitch_error, //tolerance FPSEGPT_LIST *seg_list //output list ) { - int16_t x; //current coord - int16_t min_x = 0; //in this region + int16_t x; //current coord + int16_t min_x = 0; //in this region int16_t max_x = 0; - int16_t offset; //dist to edge + int16_t offset; //dist to edge FPSEGPT *segpt; //segment point FPSEGPT *prevpt; //previous point float best_cost; //best path From 18edac40865c424a6e42bff6cf9f5faa89dc551d Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 6 Jul 2018 17:34:46 +0200 Subject: [PATCH 6/6] Fix CID 1164623 (Uninitialized scalar field) Fix it by combining constructor and Init method. Signed-off-by: Stefan Weil --- src/classify/adaptmatch.cpp | 1 - src/classify/classify.cpp | 1 + src/classify/intmatcher.cpp | 6 +++--- src/classify/intmatcher.h | 7 ++----- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/classify/adaptmatch.cpp b/src/classify/adaptmatch.cpp index 21bd07a0..5c78baf2 100644 --- a/src/classify/adaptmatch.cpp +++ b/src/classify/adaptmatch.cpp @@ -555,7 +555,6 @@ void Classify::InitAdaptiveClassifier(TessdataManager* mgr) { static_classifier_ = new TessClassifier(false, this); } - im_.Init(&classify_debug_level); InitIntegerFX(); AllProtosOn = NewBitVector(MAX_NUM_PROTOS); diff --git a/src/classify/classify.cpp b/src/classify/classify.cpp index a11ed8b7..5a9a65b0 100644 --- a/src/classify/classify.cpp +++ b/src/classify/classify.cpp @@ -184,6 +184,7 @@ Classify::Classify() this->params()), double_MEMBER(speckle_rating_penalty, 10.0, "Penalty to add to worst rating for noise", this->params()), + im_(&classify_debug_level), shape_table_(nullptr), dict_(this), static_classifier_(nullptr) { diff --git a/src/classify/intmatcher.cpp b/src/classify/intmatcher.cpp index d13a890d..7740d269 100644 --- a/src/classify/intmatcher.cpp +++ b/src/classify/intmatcher.cpp @@ -667,9 +667,9 @@ int IntegerMatcher::FindBadFeatures( } -void IntegerMatcher::Init(tesseract::IntParam *classify_debug_level) { - classify_debug_level_ = classify_debug_level; - +IntegerMatcher::IntegerMatcher(tesseract::IntParam *classify_debug_level) + : classify_debug_level_(classify_debug_level) +{ /* Initialize table for evidence to similarity lookup */ for (int i = 0; i < SE_TABLE_SIZE; i++) { uint32_t IntSimilarity = i << (27 - SE_TABLE_BITS); diff --git a/src/classify/intmatcher.h b/src/classify/intmatcher.h index af2f2118..47c9248d 100644 --- a/src/classify/intmatcher.h +++ b/src/classify/intmatcher.h @@ -93,9 +93,7 @@ class IntegerMatcher { // Center of Similarity Curve. static const float kSimilarityCenter; - IntegerMatcher() : classify_debug_level_(nullptr) {} - - void Init(tesseract::IntParam *classify_debug_level); + IntegerMatcher(tesseract::IntParam *classify_debug_level); void Match(INT_CLASS ClassTemplate, BIT_VECTOR ProtoMask, @@ -173,13 +171,12 @@ class IntegerMatcher { bool SeparateDebugWindows); #endif - private: + tesseract::IntParam *classify_debug_level_; uint8_t similarity_evidence_table_[SE_TABLE_SIZE]; uint32_t evidence_table_mask_; uint32_t mult_trunc_shift_bits_; uint32_t table_trunc_shift_bits_; - tesseract::IntParam *classify_debug_level_; uint32_t evidence_mult_mask_; };