107 lines
4 KiB
Diff
107 lines
4 KiB
Diff
==== //depot/google3/third_party/libsrtp/README.google#8 - None ====
|
|
# action=edit type=text
|
|
--- google3/third_party/libsrtp/README.google 2011-02-22 19:05:30.000000000 -0800
|
|
+++ google3/third_party/libsrtp/README.google 2011-05-27 17:56:49.000000000 -0700
|
|
@@ -21,4 +21,6 @@
|
|
- all patches are stored individually in the googlepatches subdirectory
|
|
- iOS related changes.
|
|
undefine HAVE_BYTESWAP_H in config.h
|
|
- Fix debug build compile errors: added static keyword to inline methods and undefined DEBUG before #define DEBUG
|
|
\ No newline at end of file
|
|
+ Fix debug build compile errors: added static keyword to inline methods and undefined DEBUG before #define DEBUG
|
|
+- Fixed a bug related to replay detection when sequence number rolls back
|
|
+ arround 0. (Currently contacting libsrtp developers for upstream.)
|
|
==== //depot/google3/third_party/libsrtp/crypto/replay/rdbx.c#5 - None ====
|
|
# action=edit type=text
|
|
--- google3/third_party/libsrtp/crypto/replay/rdbx.c 2010-02-25 06:36:30.000000000 -0800
|
|
+++ google3/third_party/libsrtp/crypto/replay/rdbx.c 2011-05-27 17:56:49.000000000 -0700
|
|
@@ -145,7 +145,16 @@
|
|
if (local_seq < seq_num_median) {
|
|
if (s - local_seq > seq_num_median) {
|
|
guess_roc = local_roc - 1;
|
|
- difference = seq_num_max - s + local_seq;
|
|
+ // The return value is the relative difference from local_seq to s.
|
|
+ // The original value is negation of its purpose. According to document
|
|
+ // http://www.ietf.org/rfc/rfc3711.txt, when this condition is true, the
|
|
+ // resulting new index should be (local_roc-1, s). But original logic
|
|
+ // will end up positive difference and rdbx_check would pass. Hence after
|
|
+ // rdbx_add_index would make local index to be the wrong value because
|
|
+ // local index should not be updated in this case. For example, when
|
|
+ // local index is (1, 100) and next sequence is 65530, the wrong updated
|
|
+ // index would be (1, 205).
|
|
+ difference = s - local_seq - seq_num_max;
|
|
} else {
|
|
guess_roc = local_roc;
|
|
difference = s - local_seq;
|
|
==== //depot/google3/third_party/libsrtp/test/rdbx_driver.c#5 - None ====
|
|
# action=edit type=text
|
|
--- google3/third_party/libsrtp/test/rdbx_driver.c 2010-02-25 06:36:30.000000000 -0800
|
|
+++ google3/third_party/libsrtp/test/rdbx_driver.c 2011-05-27 17:56:49.000000000 -0700
|
|
@@ -226,7 +226,7 @@
|
|
* test sequential insertion
|
|
*/
|
|
printf("\ttesting sequential insertion...");
|
|
- for (idx=0; idx < num_trials; idx++) {
|
|
+ for (idx=0; idx < (uint32_t)num_trials; idx++) {
|
|
status = rdbx_check_add(&rdbx, idx);
|
|
if (status)
|
|
return status;
|
|
@@ -245,7 +245,7 @@
|
|
printf("warning: no false positive tests performed\n");
|
|
}
|
|
printf("\ttesting for false positives...");
|
|
- for (idx=0; idx < num_fp_trials; idx++) {
|
|
+ for (idx=0; idx < (uint32_t)num_fp_trials; idx++) {
|
|
status = rdbx_check_expect_failure(&rdbx, idx);
|
|
if (status)
|
|
return status;
|
|
@@ -269,12 +269,34 @@
|
|
ut_init(&utc);
|
|
|
|
printf("\ttesting non-sequential insertion...");
|
|
- for (idx=0; idx < num_trials; idx++) {
|
|
+ for (idx=0; idx < (uint32_t)num_trials; idx++) {
|
|
ircvd = ut_next_index(&utc);
|
|
status = rdbx_check_unordered(&rdbx, ircvd);
|
|
if (status)
|
|
return status;
|
|
}
|
|
+ printf("passed\n");
|
|
+
|
|
+ /*
|
|
+ * test a replay condition close to zero.
|
|
+ */
|
|
+ rdbx_uninit(&rdbx);
|
|
+
|
|
+ if (rdbx_init(&rdbx, ws) != err_status_ok) {
|
|
+ printf("replay_init failed\n");
|
|
+ return err_status_init_fail;
|
|
+ }
|
|
+
|
|
+ printf("\ttesting replay close to zero...");
|
|
+ status = rdbx_check_add(&rdbx, 1);
|
|
+ if (status)
|
|
+ return status;
|
|
+ status = rdbx_check_expect_failure(&rdbx, 64500);
|
|
+ if (status)
|
|
+ return status;
|
|
+ status = rdbx_check_add(&rdbx, 2);
|
|
+ if (status)
|
|
+ return status;
|
|
printf("passed\n");
|
|
|
|
rdbx_uninit(&rdbx);
|
|
@@ -303,7 +325,7 @@
|
|
|
|
failures = 0;
|
|
timer = clock();
|
|
- for(i=0; i < num_trials; i++) {
|
|
+ for(i=0; i < (uint32_t)num_trials; i++) {
|
|
|
|
delta = index_guess(&rdbx.index, &est, i);
|
|
|
|
@@ -321,4 +343,3 @@
|
|
|
|
return (double) CLOCKS_PER_SEC * num_trials / timer;
|
|
}
|
|
-
|