##// END OF EJS Templates
reachableroots: unify bail cases to raise exception correctly...
Yuya Nishihara -
r26016:c8d41c9c default
parent child Browse files
Show More
@@ -1154,13 +1154,13 b' static PyObject *reachableroots(indexObj'
1154 tovisit = (int *)malloc((len + 1) * sizeof(int));
1154 tovisit = (int *)malloc((len + 1) * sizeof(int));
1155 if (tovisit == NULL) {
1155 if (tovisit == NULL) {
1156 PyErr_NoMemory();
1156 PyErr_NoMemory();
1157 goto release_reachable;
1157 goto bail;
1158 }
1158 }
1159
1159
1160 seen = (char *)calloc(len+1, 1);
1160 seen = (char *)calloc(len+1, 1);
1161 if (seen == NULL) {
1161 if (seen == NULL) {
1162 PyErr_NoMemory();
1162 PyErr_NoMemory();
1163 goto release_seen_and_tovisit;
1163 goto bail;
1164 }
1164 }
1165
1165
1166 /* Populate tovisit with all the heads */
1166 /* Populate tovisit with all the heads */
@@ -1192,7 +1192,7 b' static PyObject *reachableroots(indexObj'
1192 if (revnum != -1) {
1192 if (revnum != -1) {
1193 r = index_get_parents(self, revnum, parents, (int)len - 1);
1193 r = index_get_parents(self, revnum, parents, (int)len - 1);
1194 if (r < 0)
1194 if (r < 0)
1195 goto release_seen_and_tovisit;
1195 goto bail;
1196
1196
1197 for (i = 0; i < 2; i++) {
1197 for (i = 0; i < 2; i++) {
1198 if (seen[parents[i] + 1] == 0 && parents[i] >= minroot) {
1198 if (seen[parents[i] + 1] == 0 && parents[i] >= minroot) {
@@ -1214,7 +1214,7 b' static PyObject *reachableroots(indexObj'
1214 r = index_get_parents(self, i, parents, (int)len - 1);
1214 r = index_get_parents(self, i, parents, (int)len - 1);
1215 /* Corrupted index file, error is set from index_get_parents */
1215 /* Corrupted index file, error is set from index_get_parents */
1216 if (r < 0)
1216 if (r < 0)
1217 goto release_seen_and_tovisit;
1217 goto bail;
1218 for (k = 0; k < 2; k++) {
1218 for (k = 0; k < 2; k++) {
1219 PyObject *p = PyInt_FromLong(parents[k]);
1219 PyObject *p = PyInt_FromLong(parents[k]);
1220 if (PySet_Contains(reachable, p) == 1)
1220 if (PySet_Contains(reachable, p) == 1)
@@ -1225,13 +1225,13 b' static PyObject *reachableroots(indexObj'
1225 }
1225 }
1226 }
1226 }
1227
1227
1228 release_seen_and_tovisit:
1229 free(seen);
1228 free(seen);
1230 free(tovisit);
1229 free(tovisit);
1231 return reachable;
1230 return reachable;
1232 release_reachable:
1231 bail:
1233 Py_XDECREF(reachable);
1232 Py_XDECREF(reachable);
1234 bail:
1233 free(seen);
1234 free(tovisit);
1235 return NULL;
1235 return NULL;
1236 }
1236 }
1237
1237
@@ -94,6 +94,8 b' Test corrupted p1/p2 fields that could c'
94 > cl = changelog.changelog(scmutil.vfs(sys.argv[1]))
94 > cl = changelog.changelog(scmutil.vfs(sys.argv[1]))
95 > n0, n1 = cl.node(0), cl.node(1)
95 > n0, n1 = cl.node(0), cl.node(1)
96 > ops = [
96 > ops = [
97 > ('reachableroots',
98 > lambda: cl.index.reachableroots(0, [1], set([0]), False)),
97 > ('compute_phases_map_sets', lambda: cl.computephases([[0], []])),
99 > ('compute_phases_map_sets', lambda: cl.computephases([[0], []])),
98 > ('index_headrevs', lambda: cl.headrevs()),
100 > ('index_headrevs', lambda: cl.headrevs()),
99 > ('find_gca_candidates', lambda: cl.commonancestorsheads(n0, n1)),
101 > ('find_gca_candidates', lambda: cl.commonancestorsheads(n0, n1)),
@@ -109,11 +111,13 b' Test corrupted p1/p2 fields that could c'
109 > EOF
111 > EOF
110
112
111 $ python test.py limit/.hg/store
113 $ python test.py limit/.hg/store
114 reachableroots: parent out of range
112 compute_phases_map_sets: parent out of range
115 compute_phases_map_sets: parent out of range
113 index_headrevs: parent out of range
116 index_headrevs: parent out of range
114 find_gca_candidates: parent out of range
117 find_gca_candidates: parent out of range
115 find_deepest: parent out of range
118 find_deepest: parent out of range
116 $ python test.py segv/.hg/store
119 $ python test.py segv/.hg/store
120 reachableroots: parent out of range
117 compute_phases_map_sets: parent out of range
121 compute_phases_map_sets: parent out of range
118 index_headrevs: parent out of range
122 index_headrevs: parent out of range
119 find_gca_candidates: parent out of range
123 find_gca_candidates: parent out of range
General Comments 0
You need to be logged in to leave comments. Login now