Wed, 26 Feb 2014 07:46:46 +0100
8010500: [parfait] Possible null pointer dereference at hotspot/src/share/vm/opto/loopnode.hpp
Summary: Added NULL check for loopnode() in get_pre_loop_end()
Reviewed-by: kvn, roland
src/share/vm/opto/superword.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/opto/superword.cpp Thu Sep 12 15:29:50 2019 -0400 1.2 +++ b/src/share/vm/opto/superword.cpp Wed Feb 26 07:46:46 2014 +0100 1.3 @@ -448,6 +448,7 @@ 1.4 return true; // no induction variable 1.5 } 1.6 CountedLoopEndNode* pre_end = get_pre_loop_end(lp()->as_CountedLoop()); 1.7 + assert(pre_end != NULL, "we must have a correct pre-loop"); 1.8 assert(pre_end->stride_is_con(), "pre loop stride is constant"); 1.9 int preloop_stride = pre_end->stride_con(); 1.10 1.11 @@ -2052,7 +2053,7 @@ 1.12 CountedLoopNode *main_head = lp()->as_CountedLoop(); 1.13 assert(main_head->is_main_loop(), ""); 1.14 CountedLoopEndNode* pre_end = get_pre_loop_end(main_head); 1.15 - assert(pre_end != NULL, ""); 1.16 + assert(pre_end != NULL, "we must have a correct pre-loop"); 1.17 Node *pre_opaq1 = pre_end->limit(); 1.18 assert(pre_opaq1->Opcode() == Op_Opaque1, ""); 1.19 Opaque1Node *pre_opaq = (Opaque1Node*)pre_opaq1; 1.20 @@ -2216,7 +2217,8 @@ 1.21 if (!p_f->is_IfFalse()) return NULL; 1.22 if (!p_f->in(0)->is_CountedLoopEnd()) return NULL; 1.23 CountedLoopEndNode *pre_end = p_f->in(0)->as_CountedLoopEnd(); 1.24 - if (!pre_end->loopnode()->is_pre_loop()) return NULL; 1.25 + CountedLoopNode* loop_node = pre_end->loopnode(); 1.26 + if (loop_node == NULL || !loop_node->is_pre_loop()) return NULL; 1.27 return pre_end; 1.28 } 1.29