Home | History | Annotate | Download | only in googlepatches
      1 ==== //depot/google3/third_party/libsrtp/README.google#8 - None ====
      2 # action=edit type=text
      3 --- google3/third_party/libsrtp/README.google	2011-02-22 19:05:30.000000000 -0800
      4 +++ google3/third_party/libsrtp/README.google	2011-05-27 17:56:49.000000000 -0700
      5 @@ -21,4 +21,6 @@
      6  - all patches are stored individually in the googlepatches subdirectory
      7  - iOS related changes.
      8    undefine HAVE_BYTESWAP_H in config.h
      9 -  Fix debug build compile errors: added static keyword to inline methods and undefined DEBUG before #define DEBUG
     10 \ No newline at end of file
     11 +  Fix debug build compile errors: added static keyword to inline methods and undefined DEBUG before #define DEBUG
     12 +- Fixed a bug related to replay detection when sequence number rolls back
     13 +  arround 0. (Currently contacting libsrtp developers for upstream.)
     14 ==== //depot/google3/third_party/libsrtp/crypto/replay/rdbx.c#5 - None ====
     15 # action=edit type=text
     16 --- google3/third_party/libsrtp/crypto/replay/rdbx.c	2010-02-25 06:36:30.000000000 -0800
     17 +++ google3/third_party/libsrtp/crypto/replay/rdbx.c	2011-05-27 17:56:49.000000000 -0700
     18 @@ -145,7 +145,16 @@
     19    if (local_seq < seq_num_median) {
     20      if (s - local_seq > seq_num_median) {
     21        guess_roc = local_roc - 1;
     22 -      difference = seq_num_max - s + local_seq;
     23 +      // The return value is the relative difference from local_seq to s.
     24 +      // The original value is negation of its purpose.  According to document
     25 +      // http://www.ietf.org/rfc/rfc3711.txt, when this condition is true, the
     26 +      // resulting new index should be (local_roc-1, s).  But original logic
     27 +      // will end up positive difference and rdbx_check would pass.  Hence after
     28 +      // rdbx_add_index would make local index to be the wrong value because
     29 +      // local index should not be updated in this case.  For example, when
     30 +      // local index is (1, 100) and next sequence is 65530, the wrong updated
     31 +      // index would be (1, 205).
     32 +      difference = s - local_seq - seq_num_max;
     33      } else {
     34        guess_roc = local_roc;
     35        difference = s - local_seq;
     36 ==== //depot/google3/third_party/libsrtp/test/rdbx_driver.c#5 - None ====
     37 # action=edit type=text
     38 --- google3/third_party/libsrtp/test/rdbx_driver.c	2010-02-25 06:36:30.000000000 -0800
     39 +++ google3/third_party/libsrtp/test/rdbx_driver.c	2011-05-27 17:56:49.000000000 -0700
     40 @@ -226,7 +226,7 @@
     41     *  test sequential insertion 
     42     */
     43    printf("\ttesting sequential insertion...");
     44 -  for (idx=0; idx < num_trials; idx++) {
     45 +  for (idx=0; idx < (uint32_t)num_trials; idx++) {
     46      status = rdbx_check_add(&rdbx, idx);
     47      if (status)
     48        return status;
     49 @@ -245,7 +245,7 @@
     50      printf("warning: no false positive tests performed\n");
     51    }
     52    printf("\ttesting for false positives...");
     53 -  for (idx=0; idx < num_fp_trials; idx++) {
     54 +  for (idx=0; idx < (uint32_t)num_fp_trials; idx++) {
     55      status = rdbx_check_expect_failure(&rdbx, idx);
     56      if (status)
     57        return status;
     58 @@ -269,12 +269,34 @@
     59    ut_init(&utc);
     60  
     61    printf("\ttesting non-sequential insertion...");  
     62 -  for (idx=0; idx < num_trials; idx++) {
     63 +  for (idx=0; idx < (uint32_t)num_trials; idx++) {
     64      ircvd = ut_next_index(&utc);
     65      status = rdbx_check_unordered(&rdbx, ircvd);
     66      if (status)
     67        return status;
     68    }
     69 +  printf("passed\n");
     70 +
     71 +  /*
     72 +   * test a replay condition close to zero.
     73 +   */
     74 +  rdbx_uninit(&rdbx);
     75 +
     76 +  if (rdbx_init(&rdbx, ws) != err_status_ok) {
     77 +    printf("replay_init failed\n");
     78 +    return err_status_init_fail;
     79 +  }
     80 +
     81 +  printf("\ttesting replay close to zero...");
     82 +  status = rdbx_check_add(&rdbx, 1);
     83 +  if (status)
     84 +    return status;
     85 +  status = rdbx_check_expect_failure(&rdbx, 64500);
     86 +  if (status)
     87 +    return status;
     88 +  status = rdbx_check_add(&rdbx, 2);
     89 +  if (status)
     90 +    return status;
     91    printf("passed\n");
     92  
     93    rdbx_uninit(&rdbx);
     94 @@ -303,7 +325,7 @@
     95  
     96    failures = 0;
     97    timer = clock();
     98 -  for(i=0; i < num_trials; i++) {
     99 +  for(i=0; i < (uint32_t)num_trials; i++) {
    100      
    101      delta = index_guess(&rdbx.index, &est, i);
    102      
    103 @@ -321,4 +343,3 @@
    104  
    105    return (double) CLOCKS_PER_SEC * num_trials / timer;
    106  }
    107 -
    108