OSSP CVS Repository

ossp - Ticket #173
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Attach]  [Edit]  [History

Ticket 173: bug in OSSP str_format.c %x handling?

One of my colleagues found that %x sometimes doesn't output the '0x', particularily "%d : %x", a, b doesn't print the 0x when a == 0.

It appears this code could be at fault:

                /* Unsigned Hexadecimal Integer */
                case 'x':
                case 'X':
                    if (var_type == IS_QUAD) {
                        ui_quad = va_arg(ap, u_quad_int);
                        s = conv_p2_quad(ui_quad, 4, *fmt,
                                         &num_buf[NUM_BUF_SIZE], &s_len);
                    }
                    else {
                        if (var_type == IS_LONG)
                            ui_num = (u_long_int)va_arg(ap, u_long_int);
                        else if (var_type == IS_SHORT)
                            ui_num = (u_long_int)(unsigned short)va_arg(ap, unsigned int);
                        else
                            ui_num = (u_long_int)va_arg(ap, unsigned int);
                        s = conv_p2(ui_num, 4, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
                    }
                    FIX_PRECISION(adjust_precision, precision, s, s_len);
                    if (alternate_form && i_num != 0) {
                        *--s = *fmt; /* 'x' or 'X' */
                        *--s = '0';
                        s_len += 2;
                    }
                    break;

I think the:

                    if (alternate_form && i_num != 0) {

should be:

                    if (alternate_form && ui_num != 0) {
[Add remarks]

Remarks:

Properties:

Type: code           Version: str-0.9.12.tar.gz  
Status: new          Created: 2009-Jun-15 13:31
Severity:          Last Change: 2009-Jun-15 13:31
Priority:          Subsystem: str 
Assigned To: rse           Derived From:  
Creator: anonymous 

CVSTrac 2.0.1