pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pdf-devel] Error report, few patches and part of testcases for pdf_time


From: Łukasz Spintzyk
Subject: [pdf-devel] Error report, few patches and part of testcases for pdf_time module.
Date: Thu, 16 Apr 2009 16:41:56 +0200

Errors gnuPDF

1. pdf_time_init() -->pdf_time_context_init()
    pdf_dealloc(time_struct) cause an error.
    From man localtime
        "The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the date and time functions."
    so line
pdf_dealloc(time_struct);
is not necessary.
Patch fixing this error(by deleting this line) -->pdf_time_init.patch

2. pdf_i64_div
    Division 1 by 86400 cause floating point exception
    I have added another testcase to base/types/pdf-i64-div.c
    which is in patch file pdf_i64_div_newTest.patch
    This is that testcase
        /*
        * Test: pdf_i64_div_005
        * Description:
        *   Checks if the division 1/86400 gives 0.
        * Success conditions:
        * The call should not produce an error
        */
        START_TEST(pdf_i64_div_005)
        {
        pdf_status_t p_status = PDF_OK;
        pdf_i64_t div1,div2,dest;
        div1 = pdf_i64_new(0,1);
        div2 = pdf_i64_new(0,24*3600);
       
       
       
        #ifndef PDF_USE_BUILTIN_64BIT_SUPPORT 
        pdf_i64_div(&dest,div1,div2, &p_status);
        fail_if(p_status != PDF_OK);
        fail_if(dest.low != 0);
        fail_if(dest.high != 0);
        #else
        pdf_i64_div(&dest,div1,div2, &p_status);
        fail_if(dest != 0);
        #endif
       
        }
        END_TEST   
patch name with that testcase is pdf_i64_div_newTest.patch


3. Functions :
    pdf_status_t pdf_time_add_span()
    pdf_status_t pdf_time_sub_span()
    pdf_status_t pdf_time_diff()
    and other functions in file src/base/pdf-time.c doesn't propagete status variable, but always return PDF_OK.
    Some of them don't check if pointer argument is null.

4. Patch which adds 22 of 38 files with testcases of pdf_time module to Makefile.am and runtests.c .
    Patch name is pdf_time_22of32_tests.patch
    To this mail are also appended archive time.tar.gz with that testcases, which schould be put in
    trunk/torture/unit/base/time/

5. pdf_time_add_cal_span
    Both test from base/time/pdf_time_add_cal_span fails because of this same error.
     In test case 002 there is:
    /* test objects */
        pdf_time_t time27, time28,time29, time30;
          struct pdf_time_cal_span_s calspan;
    /* initializing
        ....
    */
        calspan.sign = PDF_FALSE;
        calspan.years=0;
        calspan.months=1;
        calspan.hours=0;
        calspan.minutes=0;
        calspan.seconds=0;
       
        calspan.days=27;
        pdf_time_add_cal_span(time27, &calspan);
        calspan.days=28;
        pdf_time_add_cal_span(time28, &calspan);
        calspan.days=29;
        pdf_time_add_cal_span(time29, &calspan);
        calspan.days=30;
        pdf_time_add_cal_span(time30, &calspan);
   
     fail_if(pdf_time_cmp(time27, time28) == 0);
      fail_if(pdf_time_cmp(time28, time29) == 0);
      fail_if(pdf_time_cmp(time29, time30) == 0);
   
    All of pdf_time_t objects have the same time, where only time27 schould be valid and point to 1970-02-28 00:00:00. time28 schould point to 1970-03-01 00:00:00 and so on.

6. pdf_time_from_string
    6 of 13 test fails. This are mainly easy to fix bugs. I had put some comments in tests that fails.


Thats is all rest of test schould be added in 2-3 weeks. However fixing bug in pdf_time_add_cal_span would be handful since it can broke other tests.
BTW if you agree with bugs from point 3 and 6 i can write a patch for that functions too.

thanks
Luke

Attachment: pdf_time_init.patch
Description: Text Data

Attachment: pdf_i64_div_newTest.patch
Description: Text Data

Attachment: pdf_time_22of32_tests.patch
Description: Text Data

Attachment: time.tar.gz
Description: GNU Zip compressed data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]