mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	dtprintinfo: Fix SIGSEGV in dtprintinfo (passing NULL as first argument to catgets).
Patch from Douglas Mencken <dougmencken@gmail.com>:
The issue is that MESSAGE tries to invoke catgets with NULL first
parameter, which is dereferenced inside catgets (Std C Library
function) without checking, from catgets.c source:
if (catalog->name_ptr[idx + 0] == (u_int32_t) set
          && catalog->name_ptr[idx + 1] == (u_int32_t) message)
On the other hand, there's a special value: -1 (cast to nl_catd),
which must be used instead of 0 (NULL) in the case when we are unable
to provide real catalog_desc, from catgets.c source:
  /* Be generous if catalog which failed to be open is used.  */
  if (catalog_desc == (nl_catd) -1 || ++set <= 0 || message < 0)
    return (char *) string;
			
			
This commit is contained in:
		
							parent
							
								
									1a03c25947
								
							
						
					
					
						commit
						606df517f0
					
				
					 1 changed files with 6 additions and 2 deletions
				
			
		| 
						 | 
					@ -94,14 +94,18 @@ int main(int argc, char **argv)
 | 
				
			||||||
      dtprintinfo_cat = catopen("dtprintinfo", 0);
 | 
					      dtprintinfo_cat = catopen("dtprintinfo", 0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if ((nl_catd) errno || dtprintinfo_cat == (nl_catd) -1)
 | 
					      if ((nl_catd) errno)
 | 
				
			||||||
         dtprintinfo_cat = NULL;
 | 
					         dtprintinfo_cat = (nl_catd) -1;
 | 
				
			||||||
#ifdef hpux
 | 
					#ifdef hpux
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
         msg_strings = (char **)calloc(LAST_MSG_NO, sizeof(char *));
 | 
					         msg_strings = (char **)calloc(LAST_MSG_NO, sizeof(char *));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if (dtprintinfo_cat == NULL) {
 | 
				
			||||||
 | 
					      dtprintinfo_cat = (nl_catd) -1;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if (!STRCMP(argv[1], "-help"))
 | 
					   if (!STRCMP(argv[1], "-help"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      char *output;
 | 
					      char *output;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue