unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Problem report #117: base/src/emacs/src/coding.c (encode_coding_object); UNINIT
@ 2008-12-03  0:59 Dan Nicolaescu
  2008-12-03  5:41 ` Kenichi Handa
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Nicolaescu @ 2008-12-03  0:59 UTC (permalink / raw)
  To: emacs-devel

CID: 117
Checker: UNINIT (help)
File: base/src/emacs/src/coding.c
Function: encode_coding_object
Description: Using uninitialized value "saved_pt_byte" in call to function "temp_set_point_both"

Event var_decl: Declared variable "saved_pt_byte" without initializer
Also see events: [uninit_use][uninit_use][uninit_use_in_call]

7330 	  int saved_pt = -1, saved_pt_byte;
7331 	  int need_marker_adjustment = 0;
7332 	  int kill_src_buffer = 0;
7333 	  Lisp_Object old_deactivate_mark;
7334 	
7335 	  old_deactivate_mark = Vdeactivate_mark;
7336 	
7337 	  coding->src_object = src_object;
7338 	  coding->src_chars = chars;
7339 	  coding->src_bytes = bytes;
7340 	  coding->src_multibyte = chars < bytes;
7341 	
7342 	  attrs = CODING_ID_ATTRS (coding->id);
7343 	

At conditional (1): "src_object == dst_object" taking true path

7344 	  if (EQ (src_object, dst_object))
7345 	    {
7346 	      struct Lisp_Marker *tail;
7347 	

At conditional (2): "tail != 0" taking true path
At conditional (5): "tail != 0" taking true path
At conditional (8): "tail != 0" taking false path

7348 	      for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
7349 		{

At conditional (3): "(tail)->insertion_type != 0" taking true path
At conditional (4): "(tail)->charpos == (((tail)->insertion_type != 0) ? from : (to))" taking true path
At conditional (6): "(tail)->insertion_type != 0" taking true path
At conditional (7): "(tail)->charpos == (((tail)->insertion_type != 0) ? from : (to))" taking false path

7350 		  tail->need_adjustment
7351 		    = tail->charpos == (tail->insertion_type ? from : to);
7352 		  need_marker_adjustment |= tail->need_adjustment;
7353 		}
7354 	    }
7355 	

At conditional (9): "((0), (attrs & -8))->contents[10] != Qnil" taking false path

7356 	  if (! NILP (CODING_ATTR_PRE_WRITE (attrs)))
7357 	    {
7358 	      coding->src_object = code_conversion_save (1, coding->src_multibyte);
7359 	      set_buffer_internal (XBUFFER (coding->src_object));
7360 	      if (STRINGP (src_object))
7361 		insert_from_string (src_object, from, from_byte, chars, bytes, 0);
7362 	      else if (BUFFERP (src_object))
7363 		insert_from_buffer (XBUFFER (src_object), from, chars, 0);
7364 	      else
7365 		insert_1_both (coding->source + from, chars, bytes, 0, 0, 0);
7366 	
7367 	      if (EQ (src_object, dst_object))
7368 		{
7369 		  set_buffer_internal (XBUFFER (src_object));
7370 		  saved_pt = PT, saved_pt_byte = PT_BYTE;
7371 		  del_range_both (from, from_byte, to, to_byte, 1);
7372 		  set_buffer_internal (XBUFFER (coding->src_object));
7373 		}
7374 	
7375 	      {
7376 		Lisp_Object args[3];
7377 		struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
7378 	
7379 		GCPRO5 (coding->src_object, coding->dst_object, src_object, dst_object,
7380 			old_deactivate_mark);
7381 		args[0] = CODING_ATTR_PRE_WRITE (attrs);
7382 		args[1] = make_number (BEG);
7383 		args[2] = make_number (Z);
7384 		safe_call (3, args);
7385 		UNGCPRO;
7386 	      }
7387 	      if (XBUFFER (coding->src_object) != current_buffer)
7388 		kill_src_buffer = 1;
7389 	      coding->src_object = Fcurrent_buffer ();
7390 	      if (BEG != GPT)
7391 		move_gap_both (BEG, BEG_BYTE);
7392 	      coding->src_chars = Z - BEG;
7393 	      coding->src_bytes = Z_BYTE - BEG_BYTE;
7394 	      coding->src_pos = BEG;
7395 	      coding->src_pos_byte = BEG_BYTE;
7396 	      coding->src_multibyte = Z < Z_BYTE;
7397 	    }

At conditional (10): "src_object & 7 == 3" taking true path

7398 	  else if (STRINGP (src_object))
7399 	    {
7400 	      code_conversion_save (0, 0);
7401 	      coding->src_pos = from;
7402 	      coding->src_pos_byte = from_byte;
7403 	    }
7404 	  else if (BUFFERP (src_object))
7405 	    {
7406 	      code_conversion_save (0, 0);
7407 	      set_buffer_internal (XBUFFER (src_object));
7408 	      if (EQ (src_object, dst_object))
7409 		{
7410 		  saved_pt = PT, saved_pt_byte = PT_BYTE;
7411 		  coding->src_object = del_range_1 (from, to, 1, 1);
7412 		  coding->src_pos = 0;
7413 		  coding->src_pos_byte = 0;
7414 		}
7415 	      else
7416 		{
7417 		  if (from < GPT && to >= GPT)
7418 		    move_gap_both (from, from_byte);
7419 		  coding->src_pos = from;
7420 		  coding->src_pos_byte = from_byte;
7421 		}
7422 	    }
7423 	  else
7424 	    code_conversion_save (0, 0);
7425 	

At conditional (11): "dst_object & 7 == 4" taking true path
At conditional (12): "((0), (dst_object & -8))->size & 4611686018427518976 == 4611686018427518976" taking true path

7426 	  if (BUFFERP (dst_object))
7427 	    {
7428 	      coding->dst_object = dst_object;

At conditional (13): "src_object == dst_object" taking true path

7429 	      if (EQ (src_object, dst_object))
7430 		{
7431 		  coding->dst_pos = from;
7432 		  coding->dst_pos_byte = from_byte;
7433 		}
7434 	      else
7435 		{
7436 		  struct buffer *current = current_buffer;
7437 	
7438 		  set_buffer_temp (XBUFFER (dst_object));
7439 		  coding->dst_pos = PT;
7440 		  coding->dst_pos_byte = PT_BYTE;
7441 		  move_gap_both (coding->dst_pos, coding->dst_pos_byte);
7442 		  set_buffer_temp (current);
7443 		}

At conditional (14): "((0), (dst_object & -8))->enable_multibyte_characters != Qnil" taking true path

7444 	      coding->dst_multibyte
7445 		= ! NILP (XBUFFER (dst_object)->enable_multibyte_characters);
7446 	    }
7447 	  else if (EQ (dst_object, Qt))
7448 	    {
7449 	      coding->dst_object = Qnil;
7450 	      coding->dst_bytes = coding->src_chars;
7451 	      if (coding->dst_bytes == 0)
7452 		coding->dst_bytes = 1;
7453 	      coding->destination = (unsigned char *) xmalloc (coding->dst_bytes);
7454 	      coding->dst_multibyte = 0;
7455 	    }
7456 	  else
7457 	    {
7458 	      coding->dst_object = Qnil;
7459 	      coding->dst_multibyte = 0;
7460 	    }
7461 	
7462 	  encode_coding (coding);
7463 	

At conditional (15): "dst_object == Qt" taking true path

7464 	  if (EQ (dst_object, Qt))
7465 	    {

At conditional (16): "(coding)->dst_object & 7 == 4" taking true path
At conditional (17): "((0), ((coding)->dst_object & -8))->size & 4611686018427518976 == 4611686018427518976" taking true path

7466 	      if (BUFFERP (coding->dst_object))
7467 		coding->dst_object = Fbuffer_string ();
7468 	      else
7469 		{
7470 		  coding->dst_object
7471 		    = make_unibyte_string ((char *) coding->destination,
7472 					   coding->produced);
7473 		  xfree (coding->destination);
7474 		}
7475 	    }
7476 	

At conditional (18): "saved_pt >= 0" taking true path

7477 	  if (saved_pt >= 0)
7478 	    {
7479 	      /* This is the case of:
7480 		 (BUFFERP (src_object) && EQ (src_object, dst_object))
7481 		 As we have moved PT while replacing the original buffer
7482 		 contents, we must recover it now.  */
7483 	      set_buffer_internal (XBUFFER (src_object));

At conditional (19): "saved_pt < from" taking false path

7484 	      if (saved_pt < from)

Event uninit_use_in_call: Using uninitialized value "saved_pt_byte" in call to function "temp_set_point_both" [model]
Also see events: [var_decl][uninit_use][uninit_use]

7485 		TEMP_SET_PT_BOTH (saved_pt, saved_pt_byte);

At conditional (20): "saved_pt < (from + chars)" taking false path

7486 	      else if (saved_pt < from + chars)
7487 		TEMP_SET_PT_BOTH (from, from_byte);

At conditional (21): "(current_buffer)->enable_multibyte_characters != Qnil" taking true path

7488 	      else if (! NILP (current_buffer->enable_multibyte_characters))

Event uninit_use: Using uninitialized value "saved_pt_byte"
Also see events: [var_decl][uninit_use][uninit_use_in_call]

7489 		TEMP_SET_PT_BOTH (saved_pt + (coding->produced_char - chars),
7490 				  saved_pt_byte + (coding->produced - bytes));
7491 	      else

Event uninit_use: Using uninitialized value "saved_pt_byte"
Also see events: [var_decl][uninit_use][uninit_use_in_call]

7492 		TEMP_SET_PT_BOTH (saved_pt + (coding->produced - bytes),
7493 				  saved_pt_byte + (coding->produced - bytes));
7494 	




^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Problem report #117: base/src/emacs/src/coding.c (encode_coding_object); UNINIT
  2008-12-03  0:59 Problem report #117: base/src/emacs/src/coding.c (encode_coding_object); UNINIT Dan Nicolaescu
@ 2008-12-03  5:41 ` Kenichi Handa
  0 siblings, 0 replies; 2+ messages in thread
From: Kenichi Handa @ 2008-12-03  5:41 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: emacs-devel

In article <200812030116.mB31G0IE022796@mothra.ics.uci.edu>, Dan Nicolaescu <dann@ics.uci.edu> writes:

> CID: 117
> Checker: UNINIT (help)
> File: base/src/emacs/src/coding.c
> Function: encode_coding_object
> Description: Using uninitialized value "saved_pt_byte" in call to function "temp_set_point_both"

That should not happen because:
[...]
> Event uninit_use: Using uninitialized value "saved_pt_byte"
> Also see events: [var_decl][uninit_use][uninit_use_in_call]

> 7489 		TEMP_SET_PT_BOTH (saved_pt + (coding->produced_char - chars),
> 7490 				  saved_pt_byte + (coding->produced - bytes));
> 7491 	      else

We come here only when saved_pt >= 0, and that means
save_pt_byte is already set.

---
Kenichi Handa
handa@ni.aist.go.jp




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-12-03  5:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-03  0:59 Problem report #117: base/src/emacs/src/coding.c (encode_coding_object); UNINIT Dan Nicolaescu
2008-12-03  5:41 ` Kenichi Handa

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).