25.05.2016 18:52, Dmitry Yemanov wrote:
> Invalidate transaction and raise error/bugcheck?

   What do you think about following patch? At first glance it may work (at 
least it makes 
subj work).

> diff --git a/src/jrd/tra.cpp b/src/jrd/tra.cpp
> index 80feebd..c4dc7d5 100644
> --- a/src/jrd/tra.cpp
> +++ b/src/jrd/tra.cpp
> @@ -3579,9 +3579,18 @@ void jrd_tra::rollbackToSavepoint(thread_db* tdbb, 
> SavNumber number)
>   *
>   **************************************/
>  {
> +     Savepoint* toMerge = tra_save_point;
> +     while (toMerge)
> +     {
> +             if (toMerge->getNumber() == number)
> +                     break;
> +             toMerge = toMerge->getNext();
> +     }
> +     if (!toMerge)
> +             BUGCHECK(290);
> +
>       // Merge all but one folowing savepoints into one
> -     while (tra_save_point && tra_save_point->getNumber() > number &&
> -             tra_save_point->getNext() && 
> tra_save_point->getNext()->getNumber() >= number)
> +     while (tra_save_point != toMerge)
>       {
>               rollforwardSavepoint(tdbb);
>       }
> @@ -3589,8 +3598,7 @@ void jrd_tra::rollbackToSavepoint(thread_db* tdbb, 
> SavNumber number)
>       // Check that savepoint with given number really exists
>       fb_assert(tra_save_point && tra_save_point->getNumber() == number);
>
> -     if (tra_save_point && tra_save_point->getNumber() >= number) // second 
> line of defence
> -     // under no circumstances a savepoint with smaller number should be 
> rolled back
> +     if (tra_save_point)
>       {
>               // Undo the savepoint
>               rollbackSavepoint(tdbb);

-- 
   WBR, SD.

------------------------------------------------------------------------------
Mobile security can be enabling, not merely restricting. Employees who
bring their own devices (BYOD) to work are irked by the imposition of MDM
restrictions. Mobile Device Manager Plus allows you to control only the
apps on BYO-devices by containerizing them, leaving personal data untouched!
https://ad.doubleclick.net/ddm/clk/304595813;131938128;j
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to