Fix validity checks.

This commit is contained in:
Andrei Zmievski 2006-07-10 22:12:47 +00:00
parent 5f19cb01f6
commit 07bb47a406

View file

@ -107,7 +107,15 @@ PHPAPI zend_class_entry* rev_text_iterator_ce;
static int text_iter_cp_valid(text_iter_obj* object, long flags TSRMLS_DC) static int text_iter_cp_valid(text_iter_obj* object, long flags TSRMLS_DC)
{ {
return (object->u.cp.offset != UBRK_DONE); if (object->u.cp.offset == UBRK_DONE) {
return 0;
}
if (flags & ITER_REVERSE) {
return (object->u.cp.offset != 0);
} else {
return (object->u.cp.offset != object->text_len);
}
} }
static void text_iter_cp_current(text_iter_obj* object, long flags TSRMLS_DC) static void text_iter_cp_current(text_iter_obj* object, long flags TSRMLS_DC)
@ -144,7 +152,10 @@ static int text_iter_cp_offset(text_iter_obj* object, long flags TSRMLS_DC)
static void text_iter_cp_next(text_iter_obj* object, long flags TSRMLS_DC) static void text_iter_cp_next(text_iter_obj* object, long flags TSRMLS_DC)
{ {
if (text_iter_cp_valid(object, flags TSRMLS_CC)) { if (object->u.cp.offset == UBRK_DONE) {
return;
}
if (flags & ITER_REVERSE) { if (flags & ITER_REVERSE) {
U16_BACK_1(object->text, 0, object->u.cp.offset); U16_BACK_1(object->text, 0, object->u.cp.offset);
if (object->u.cp.offset <= object->text_len) { if (object->u.cp.offset <= object->text_len) {
@ -161,7 +172,6 @@ static void text_iter_cp_next(text_iter_obj* object, long flags TSRMLS_DC)
} }
} }
object->u.cp.index++; object->u.cp.index++;
}
} }
static void text_iter_cp_rewind(text_iter_obj *object, long flags TSRMLS_DC) static void text_iter_cp_rewind(text_iter_obj *object, long flags TSRMLS_DC)
@ -361,7 +371,15 @@ static void text_iter_helper_move(zend_bool forward, UChar *text, int32_t text_l
static int text_iter_cs_valid(text_iter_obj* object, long flags TSRMLS_DC) static int text_iter_cs_valid(text_iter_obj* object, long flags TSRMLS_DC)
{ {
return (object->u.cs.start != UBRK_DONE); if (object->u.cs.start == UBRK_DONE) {
return 0;
}
if (flags & ITER_REVERSE) {
return (object->u.cs.start != 0);
} else {
return (object->u.cs.start != object->text_len);
}
} }
static void text_iter_cs_current(text_iter_obj* object, long flags TSRMLS_DC) static void text_iter_cs_current(text_iter_obj* object, long flags TSRMLS_DC)
@ -373,7 +391,7 @@ static void text_iter_cs_current(text_iter_obj* object, long flags TSRMLS_DC)
if (flags & ITER_REVERSE) { if (flags & ITER_REVERSE) {
if (object->u.cs.end == object->u.cs.start) { if (object->u.cs.end == object->u.cs.start) {
text_iter_helper_move(0, object->text, object->text_len, text_iter_helper_move(0, object->text, object->text_len,
&object->u.cs.start, &object->u.cs.start_cp_offset); &object->u.cs.end, &object->u.cs.end_cp_offset);
} }
start = object->text + object->u.cs.end; start = object->text + object->u.cs.end;
} else { } else {
@ -567,7 +585,15 @@ static text_iter_ops text_iter_cs_ops = {
static int text_iter_brk_valid(text_iter_obj* object, long flags TSRMLS_DC) static int text_iter_brk_valid(text_iter_obj* object, long flags TSRMLS_DC)
{ {
return (object->u.brk.bound != UBRK_DONE); if (object->u.brk.bound == UBRK_DONE) {
return 0;
}
if (flags & ITER_REVERSE) {
return (object->u.brk.bound != 0);
} else {
return (object->u.brk.bound != object->text_len);
}
} }
static void text_iter_brk_current(text_iter_obj* object, long flags TSRMLS_DC) static void text_iter_brk_current(text_iter_obj* object, long flags TSRMLS_DC)