summaryrefslogtreecommitdiffstats
path: root/Judy-1.0.5-undefined-behavior.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Judy-1.0.5-undefined-behavior.patch')
-rw-r--r--Judy-1.0.5-undefined-behavior.patch120
1 files changed, 120 insertions, 0 deletions
diff --git a/Judy-1.0.5-undefined-behavior.patch b/Judy-1.0.5-undefined-behavior.patch
new file mode 100644
index 0000000..e8741d0
--- /dev/null
+++ b/Judy-1.0.5-undefined-behavior.patch
@@ -0,0 +1,120 @@
+diff -crb judy-1.0.5-orig/src/JudyCommon/JudyByCount.c judy-1.0.5/src/JudyCommon/JudyByCount.c
+*** judy-1.0.5-orig/src/JudyCommon/JudyByCount.c 2005-02-15 15:06:07.000000000 -0600
+--- judy-1.0.5/src/JudyCommon/JudyByCount.c 2014-02-18 13:45:35.225145230 -0600
+***************
+*** 817,823 ****
+ // Shorthand for where to find start of Index bytes array:
+
+ #ifdef JUDY1
+! #define PJI (Pjp->jp_1Index)
+ #else
+ #define PJI (Pjp->jp_LIndex)
+ #endif
+--- 817,823 ----
+ // Shorthand for where to find start of Index bytes array:
+
+ #ifdef JUDY1
+! #define PJI (Pjp->jp_2Index)
+ #else
+ #define PJI (Pjp->jp_LIndex)
+ #endif
+diff -crb judy-1.0.5-orig/src/JudyCommon/JudyGet.c judy-1.0.5/src/JudyCommon/JudyGet.c
+*** judy-1.0.5-orig/src/JudyCommon/JudyGet.c 2005-02-15 15:06:07.000000000 -0600
+--- judy-1.0.5/src/JudyCommon/JudyGet.c 2014-02-18 13:49:50.840632644 -0600
+***************
+*** 630,636 ****
+ #ifdef JUDY1
+
+ #define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX) \
+! if (((LEAF_T *)((PJP)->jp_1Index))[(IDX) - 1] == (LEAF_T)(INDEX)) \
+ return(1)
+
+ #define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY) \
+--- 630,636 ----
+ #ifdef JUDY1
+
+ #define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX) \
+! if (((LEAF_T *)((PJP)->jp_2Index))[(IDX) - 1] == (LEAF_T)(INDEX)) \
+ return(1)
+
+ #define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY) \
+diff -crb judy-1.0.5-orig/src/JudyCommon/JudyIns.c judy-1.0.5/src/JudyCommon/JudyIns.c
+*** judy-1.0.5-orig/src/JudyCommon/JudyIns.c 2005-02-15 15:06:07.000000000 -0600
+--- judy-1.0.5/src/JudyCommon/JudyIns.c 2014-02-18 13:00:49.871850635 -0600
+***************
+*** 1503,1509 ****
+ JU_BITMAPSETL(Pjlb, Index);
+
+ for (offset = 0; offset < 15; ++offset)
+! JU_BITMAPSETL(Pjlb, Pjp->jp_1Index[offset]);
+
+ // Set jp_DcdPopO including the current pop0; incremented later:
+ DcdP0 = (Index & cJU_DCDMASK(1)) + 15 - 1;
+--- 1503,1510 ----
+ JU_BITMAPSETL(Pjlb, Index);
+
+ for (offset = 0; offset < 15; ++offset)
+! // JU_BITMAPSETL(Pjlb, Pjp->jp_1Index[offset]); // elements 8..15 are optimized out by gcc, so need to do the following
+! JU_BITMAPSETL(Pjlb, Pjp->jp_2Index[offset]);
+
+ // Set jp_DcdPopO including the current pop0; incremented later:
+ DcdP0 = (Index & cJU_DCDMASK(1)) + 15 - 1;
+diff -crb judy-1.0.5-orig/src/JudyCommon/JudyPrevNext.c judy-1.0.5/src/JudyCommon/JudyPrevNext.c
+*** judy-1.0.5-orig/src/JudyCommon/JudyPrevNext.c 2005-02-15 15:06:07.000000000 -0600
+--- judy-1.0.5/src/JudyCommon/JudyPrevNext.c 2014-02-18 13:45:40.972875737 -0600
+***************
+*** 907,913 ****
+ // Shorthand for where to find start of Index bytes array:
+
+ #ifdef JUDY1
+! #define PJI (Pjp->jp_1Index)
+ #else
+ #define PJI (Pjp->jp_LIndex)
+ #endif
+--- 907,913 ----
+ // Shorthand for where to find start of Index bytes array:
+
+ #ifdef JUDY1
+! #define PJI (Pjp->jp_2Index)
+ #else
+ #define PJI (Pjp->jp_LIndex)
+ #endif
+diff -crb judy-1.0.5-orig/src/JudyCommon/JudyPrivateBranch.h judy-1.0.5/src/JudyCommon/JudyPrivateBranch.h
+*** judy-1.0.5-orig/src/JudyCommon/JudyPrivateBranch.h 2005-02-15 15:06:07.000000000 -0600
+--- judy-1.0.5/src/JudyCommon/JudyPrivateBranch.h 2014-02-18 13:00:39.510533765 -0600
+***************
+*** 86,91 ****
+--- 86,98 ----
+ } jpi_t;
+
+
++ typedef struct _JUDY_POINTER_IMMED2 // JPI2.
++ {
++ uint8_t j_pi_2Index[2 * sizeof(Word_t) - 1]; // see above.
++ uint8_t j_pi_Type; // JP type, 1 of cJ*_JPIMMED*.
++ } jpi2_t;
++
++
+ // UNION OF JP TYPES:
+ //
+ // A branch is an array of cJU_BRANCHUNUMJPS (256) of this object, or an
+***************
+*** 97,102 ****
+--- 104,110 ----
+ {
+ jpo_t j_po; // other than immediate indexes.
+ jpi_t j_pi; // immediate indexes.
++ jpi2_t j_pi2; // immediate indexes using j_pi_LIndex as well
+ } jp_t, *Pjp_t;
+
+ // For coding convenience:
+***************
+*** 105,110 ****
+--- 113,119 ----
+
+ #define jp_1Index j_pi.j_pi_1Index // for storing Indexes in first word.
+ #define jp_LIndex j_pi.j_pi_LIndex // for storing Indexes in second word.
++ #define jp_2Index j_pi2.j_pi_2Index // for storing Indexes spanning both words.
+ #define jp_Addr j_po.j_po_Addr
+ //#define jp_DcdPop0 j_po.jpo_u.j_po_DcdPop0
+ #define jp_Type j_po.jpo_u.j_po_Bytes[sizeof(Word_t) - 1]