Changeset 8396b41 in git


Ignore:
Timestamp:
Jul 7, 2014, 12:30:23 PM (10 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'c5facdfddea2addfd91babd8b9019161dea4b695')
Children:
7cdd912b9b6c44ae159128e2ef64cbaede6f8351
Parents:
7ecb7800b8a011e2ad54b5616f6cb5325afd91cc
git-author:
Martin Lee <martinlee84@web.de>2014-07-07 12:30:23+02:00
git-committer:
Martin Lee <martinlee84@web.de>2014-07-09 16:09:16+02:00
Message:
fix: possible segfault when passing to extensions in sparse gcd
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/cfModGcd.cc

    r7ecb780 r8396b41  
    22032203  CFArray gcds= CFArray (biggestSize);
    22042204  CFList * pEvalPoints= new CFList [biggestSize];
    2205   Variable V_buf= alpha;
     2205  Variable V_buf= alpha, V_buf4= alpha;
    22062206  CFList source, dest;
    22072207  CanonicalForm prim_elem, im_prim_elem;
     2208  CanonicalForm prim_elem_alpha, im_prim_elem_alpha;
    22082209  for (int i= 0; i < biggestSize; i++)
    22092210  {
     
    22232224        do
    22242225        {
    2225           Variable V_buf2= chooseExtension (V_buf);
     2226          Variable V_buf3= V_buf;
     2227          V_buf= chooseExtension (V_buf);
    22262228          source= CFList();
    22272229          dest= CFList();
    22282230
    22292231          bool prim_fail= false;
    2230           Variable V_buf3;
    2231           prim_elem= primitiveElement (V_buf, V_buf3, prim_fail);
     2232          Variable V_buf2;
     2233          prim_elem= primitiveElement (V_buf4, V_buf2, prim_fail);
     2234          if (V_buf4 == alpha && alpha.level() != 1)
     2235            prim_elem_alpha= prim_elem;
    22322236
    22332237          ASSERT (!prim_fail, "failure in integer factorizer");
     
    22352239            ; //ERROR
    22362240          else
    2237             im_prim_elem= mapPrimElem (prim_elem, V_buf, V_buf2);
     2241            im_prim_elem= mapPrimElem (prim_elem, V_buf4, V_buf);
    22382242
    22392243          DEBOUTLN (cerr, "getMipo (alpha)= " << getMipo (V_buf));
    22402244          DEBOUTLN (cerr, "getMipo (alpha)= " << getMipo (V_buf2));
    22412245
     2246          if (V_buf4 == alpha && alpha.level() != 1)
     2247            im_prim_elem_alpha= im_prim_elem;
     2248          else if (alpha.level() != 1)
     2249            im_prim_elem_alpha= mapUp (im_prim_elem_alpha, V_buf4, V_buf,
     2250                                       prim_elem, im_prim_elem, source, dest);
     2251
    22422252          for (CFListIterator j= list; j.hasItem(); j++)
    2243             j.getItem()= mapUp (j.getItem(), V_buf, V_buf2, prim_elem,
     2253            j.getItem()= mapUp (j.getItem(), V_buf4, V_buf, prim_elem,
    22442254                                im_prim_elem, source, dest);
    22452255          for (int k= 0; k < i; k++)
    22462256          {
    22472257            for (CFListIterator j= pEvalPoints[k]; j.hasItem(); j++)
    2248               j.getItem()= mapUp (j.getItem(), V_buf, V_buf2, prim_elem,
     2258              j.getItem()= mapUp (j.getItem(), V_buf4, V_buf, prim_elem,
    22492259                                  im_prim_elem, source, dest);
    2250             gcds[k]= mapUp (gcds[k], V_buf, V_buf2, prim_elem, im_prim_elem,
     2260            gcds[k]= mapUp (gcds[k], V_buf4, V_buf, prim_elem, im_prim_elem,
    22512261                            source, dest);
    22522262          }
     
    22542264          if (alpha.level() != 1)
    22552265          {
    2256             A= mapUp (A, V_buf, V_buf2, prim_elem, im_prim_elem, source,dest);
    2257             B= mapUp (B, V_buf, V_buf2, prim_elem, im_prim_elem, source,dest);
     2266            A= mapUp (A, V_buf4, V_buf, prim_elem, im_prim_elem, source,dest);
     2267            B= mapUp (B, V_buf4, V_buf, prim_elem, im_prim_elem, source,dest);
    22582268          }
     2269          V_buf4= V_buf;
    22592270          evalFail= false;
    22602271          evalPoints= evaluationPoints (A, B, Aeval, Beval, LCA, GF, V_buf,
     
    22742285          deg++;
    22752286        } while (evalFail);
     2287        V_buf4= V_buf;
    22762288      }
    22772289    }
     
    23702382  {
    23712383    CFList u, v;
    2372     result= mapDown (result, prim_elem, im_prim_elem, alpha, u, v);
     2384    result= mapDown (result, prim_elem_alpha, im_prim_elem_alpha, alpha, u, v);
    23732385  }
    23742386
     
    24752487  CFArray gcds= CFArray (biggestSize);
    24762488  CFList * pEvalPoints= new CFList [biggestSize];
    2477   Variable V_buf= alpha;
     2489  Variable V_buf= alpha, V_buf4= alpha;
    24782490  CFList source, dest;
    24792491  CanonicalForm prim_elem, im_prim_elem;
     2492  CanonicalForm prim_elem_alpha, im_prim_elem_alpha;
    24802493  for (int i= 0; i < biggestSize; i++)
    24812494  {
     
    24942507          do
    24952508          {
    2496             Variable V_buf2= chooseExtension (V_buf);
     2509            Variable V_buf3= V_buf;
     2510            V_buf= chooseExtension (V_buf);
    24972511            source= CFList();
    24982512            dest= CFList();
    24992513
    25002514            bool prim_fail= false;
    2501             Variable V_buf3;
    2502             prim_elem= primitiveElement (V_buf, V_buf3, prim_fail);
     2515            Variable V_buf2;
     2516            prim_elem= primitiveElement (V_buf4, V_buf2, prim_fail);
     2517            if (V_buf4 == alpha && alpha.level() != 1)
     2518              prim_elem_alpha= prim_elem;
    25032519
    25042520            ASSERT (!prim_fail, "failure in integer factorizer");
     
    25062522              ; //ERROR
    25072523            else
    2508               im_prim_elem= mapPrimElem (prim_elem, V_buf, V_buf2);
    2509 
    2510             DEBOUTLN (cerr, "getMipo (alpha)= " << getMipo (V_buf));
    2511             DEBOUTLN (cerr, "getMipo (alpha)= " << getMipo (V_buf2));
     2524              im_prim_elem= mapPrimElem (prim_elem, V_buf4, V_buf);
     2525
     2526            DEBOUTLN (cerr, "getMipo (V_buf)= " << getMipo (V_buf));
     2527            DEBOUTLN (cerr, "getMipo (V_buf2)= " << getMipo (V_buf2));
     2528
     2529            if (V_buf4 == alpha && alpha.level() != 1)
     2530              im_prim_elem_alpha= im_prim_elem;
     2531            else if (alpha.level() != 1)
     2532              im_prim_elem_alpha= mapUp (im_prim_elem_alpha, V_buf4, V_buf,
     2533                                         prim_elem, im_prim_elem, source, dest);
    25122534
    25132535            for (CFListIterator i= list; i.hasItem(); i++)
    2514               i.getItem()= mapUp (i.getItem(), V_buf, V_buf2, prim_elem,
     2536              i.getItem()= mapUp (i.getItem(), V_buf4, V_buf, prim_elem,
    25152537                                im_prim_elem, source, dest);
     2538            if (alpha.level() != 1)
     2539            {
     2540              A= mapUp (A, V_buf4, V_buf, prim_elem, im_prim_elem, source,dest);
     2541              B= mapUp (B, V_buf4, V_buf, prim_elem, im_prim_elem, source,dest);
     2542            }
    25162543            evalFail= false;
     2544            V_buf4= V_buf;
    25172545            evalPoints= evaluationPoints (A, B, Aeval, Beval, LCA, GF, V_buf,
    25182546                                          evalFail, list);
     
    25312559            deg++;
    25322560          } while (evalFail);
     2561          V_buf4= V_buf;
    25332562        }
    25342563      }
     
    28312860    for (int i= 0; i < skelSize; i++)
    28322861    {
     2862      if (coeffMonoms[i].size() + 1 >= pMat[i].rows() || coeffMonoms[i].size() + 1 >= pMat[i].columns())
     2863      {
     2864        delete[] pEvalPoints;
     2865        delete[] pMat;
     2866        delete[] pL;
     2867        delete[] coeffMonoms;
     2868        delete[] pM;
     2869        if (bufpEvalPoints != NULL)
     2870          delete [] bufpEvalPoints;
     2871        fail= true;
     2872        return 0;
     2873      }
    28332874      bufMat= pMat[i] (coeffMonoms[i].size() + 1, pMat[i].rows(),
    28342875                       coeffMonoms[i].size() + 1, pMat[i].columns());
     
    28802921    {
    28812922      CFList u, v;
    2882       result= mapDown (result, prim_elem, im_prim_elem, alpha, u, v);
     2923      result= mapDown (result,prim_elem_alpha, im_prim_elem_alpha, alpha, u, v);
    28832924    }
    28842925    result= N(result);
     
    30543095  topLevel= false;
    30553096  bool inextension= false;
    3056   Variable V_buf= alpha;
     3097  Variable V_buf= alpha, V_buf4= alpha;
    30573098  CanonicalForm prim_elem, im_prim_elem;
     3099  CanonicalForm prim_elem_alpha, im_prim_elem_alpha;
    30583100  CFList source, dest;
    30593101  do // first do
     
    30753117      bool prim_fail= false;
    30763118      Variable V_buf2;
    3077       prim_elem= primitiveElement (alpha, V_buf2, prim_fail);
    3078 
    3079       if (V_buf3 != alpha)
    3080       {
    3081         m= mapDown (m, prim_elem, im_prim_elem, alpha, source, dest);
    3082         G_m= mapDown (m, prim_elem, im_prim_elem, alpha, source, dest);
    3083         newtonPoly= mapDown (newtonPoly, prim_elem, im_prim_elem, alpha,
     3119      prim_elem= primitiveElement (V_buf4, V_buf2, prim_fail);
     3120      if (V_buf4 == alpha)
     3121        prim_elem_alpha= prim_elem;
     3122
     3123      if (V_buf3 != V_buf4)
     3124      {
     3125        m= mapDown (m, prim_elem, im_prim_elem, V_buf4, source, dest);
     3126        G_m= mapDown (m, prim_elem, im_prim_elem, V_buf4, source, dest);
     3127        newtonPoly= mapDown (newtonPoly, prim_elem, im_prim_elem, V_buf4,
    30843128                             source, dest);
    3085         ppA= mapDown (ppA, prim_elem, im_prim_elem, alpha, source, dest);
    3086         ppB= mapDown (ppB, prim_elem, im_prim_elem, alpha, source, dest);
    3087         gcdlcAlcB= mapDown (gcdlcAlcB, prim_elem, im_prim_elem, alpha, source,
     3129        ppA= mapDown (ppA, prim_elem, im_prim_elem, V_buf4, source, dest);
     3130        ppB= mapDown (ppB, prim_elem, im_prim_elem, V_buf4, source, dest);
     3131        gcdlcAlcB= mapDown (gcdlcAlcB, prim_elem, im_prim_elem, V_buf4, source,
    30883132                            dest);
    30893133        for (CFListIterator i= l; i.hasItem(); i++)
    3090           i.getItem()= mapDown (i.getItem(), prim_elem, im_prim_elem, alpha,
     3134          i.getItem()= mapDown (i.getItem(), prim_elem, im_prim_elem, V_buf4,
    30913135                                source, dest);
    30923136      }
     
    30963140        ; //ERROR
    30973141      else
    3098         im_prim_elem= mapPrimElem (prim_elem, alpha, V_buf);
    3099 
    3100       DEBOUTLN (cerr, "getMipo (alpha)= " << getMipo (alpha));
     3142        im_prim_elem= mapPrimElem (prim_elem, V_buf4, V_buf);
     3143
     3144      if (V_buf4 == alpha)
     3145        im_prim_elem_alpha= im_prim_elem;
     3146      else
     3147        im_prim_elem_alpha= mapUp (im_prim_elem_alpha, V_buf4, V_buf, prim_elem,
     3148                                   im_prim_elem, source, dest);
     3149
     3150      DEBOUTLN (cerr, "getMipo (V_buf4)= " << getMipo (V_buf4));
    31013151      DEBOUTLN (cerr, "getMipo (V_buf2)= " << getMipo (V_buf2));
    31023152      inextension= true;
    31033153      for (CFListIterator i= l; i.hasItem(); i++)
    3104         i.getItem()= mapUp (i.getItem(), alpha, V_buf, prim_elem,
     3154        i.getItem()= mapUp (i.getItem(), V_buf4, V_buf, prim_elem,
    31053155                             im_prim_elem, source, dest);
    3106       m= mapUp (m, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3107       G_m= mapUp (G_m, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3108       newtonPoly= mapUp (newtonPoly, alpha, V_buf, prim_elem, im_prim_elem,
     3156      m= mapUp (m, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3157      G_m= mapUp (G_m, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3158      newtonPoly= mapUp (newtonPoly, V_buf4, V_buf, prim_elem, im_prim_elem,
    31093159                          source, dest);
    3110       ppA= mapUp (ppA, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3111       ppB= mapUp (ppB, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3112       gcdlcAlcB= mapUp (gcdlcAlcB, alpha, V_buf, prim_elem, im_prim_elem,
     3160      ppA= mapUp (ppA, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3161      ppB= mapUp (ppB, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3162      gcdlcAlcB= mapUp (gcdlcAlcB, V_buf4, V_buf, prim_elem, im_prim_elem,
    31133163                         source, dest);
    31143164
     
    31243174                            "time for recursive call: ");
    31253175      DEBOUTLN (cerr, "G_random_element= " << G_random_element);
     3176      V_buf4= V_buf;
    31263177    }
    31273178    else
     
    31843235        {
    31853236          DEBOUTLN (cerr, "ppH before mapDown= " << ppH);
    3186           ppH= mapDown (ppH, prim_elem, im_prim_elem, alpha, u, v);
     3237          ppH= mapDown (ppH, prim_elem_alpha, im_prim_elem_alpha, alpha, u, v);
    31873238          ppH /= Lc(ppH);
    31883239          DEBOUTLN (cerr, "ppH after mapDown= " << ppH);
     
    32213272          bool prim_fail= false;
    32223273          Variable V_buf2;
    3223           prim_elem= primitiveElement (alpha, V_buf2, prim_fail);
    3224 
    3225           if (V_buf3 != alpha)
     3274          prim_elem= primitiveElement (V_buf4, V_buf2, prim_fail);
     3275          if (V_buf4 == alpha)
     3276            prim_elem_alpha= prim_elem;
     3277
     3278          if (V_buf3 != V_buf4)
    32263279          {
    3227             m= mapDown (m, prim_elem, im_prim_elem, alpha, source, dest);
    3228             G_m= mapDown (m, prim_elem, im_prim_elem, alpha, source, dest);
    3229             newtonPoly= mapDown (newtonPoly, prim_elem, im_prim_elem, alpha,
     3280            m= mapDown (m, prim_elem, im_prim_elem, V_buf4, source, dest);
     3281            G_m= mapDown (m, prim_elem, im_prim_elem, V_buf4, source, dest);
     3282            newtonPoly= mapDown (newtonPoly, prim_elem, im_prim_elem, V_buf4,
    32303283                                 source, dest);
    3231             ppA= mapDown (ppA, prim_elem, im_prim_elem, alpha, source, dest);
    3232             ppB= mapDown (ppB, prim_elem, im_prim_elem, alpha, source, dest);
    3233             gcdlcAlcB= mapDown (gcdlcAlcB, prim_elem, im_prim_elem, alpha,
     3284            ppA= mapDown (ppA, prim_elem, im_prim_elem, V_buf4, source, dest);
     3285            ppB= mapDown (ppB, prim_elem, im_prim_elem, V_buf4, source, dest);
     3286            gcdlcAlcB= mapDown (gcdlcAlcB, prim_elem, im_prim_elem, V_buf4,
    32343287                                source, dest);
    32353288            for (CFListIterator i= l; i.hasItem(); i++)
    3236               i.getItem()= mapDown (i.getItem(), prim_elem, im_prim_elem, alpha,
     3289              i.getItem()= mapDown (i.getItem(), prim_elem, im_prim_elem, V_buf4,
    32373290                                    source, dest);
    32383291          }
     
    32423295            ; //ERROR
    32433296          else
    3244             im_prim_elem= mapPrimElem (prim_elem, alpha, V_buf);
    3245 
    3246           DEBOUTLN (cerr, "getMipo (alpha)= " << getMipo (alpha));
     3297            im_prim_elem= mapPrimElem (prim_elem, V_buf4, V_buf);
     3298
     3299          if (V_buf4 == alpha)
     3300            im_prim_elem_alpha= im_prim_elem;
     3301          else
     3302            im_prim_elem_alpha= mapUp (im_prim_elem_alpha, V_buf4, V_buf,
     3303                                       prim_elem, im_prim_elem, source, dest);
     3304
     3305          DEBOUTLN (cerr, "getMipo (V_buf4)= " << getMipo (V_buf4));
    32473306          DEBOUTLN (cerr, "getMipo (V_buf2)= " << getMipo (V_buf2));
    32483307          inextension= true;
    32493308          for (CFListIterator i= l; i.hasItem(); i++)
    3250             i.getItem()= mapUp (i.getItem(), alpha, V_buf, prim_elem,
     3309            i.getItem()= mapUp (i.getItem(), V_buf4, V_buf, prim_elem,
    32513310                                im_prim_elem, source, dest);
    3252           m= mapUp (m, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3253           G_m= mapUp (G_m, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3254           newtonPoly= mapUp (newtonPoly, alpha, V_buf, prim_elem, im_prim_elem,
     3311          m= mapUp (m, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3312          G_m= mapUp (G_m, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3313          newtonPoly= mapUp (newtonPoly, V_buf4, V_buf, prim_elem, im_prim_elem,
    32553314                              source, dest);
    3256           ppA= mapUp (ppA, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3257           ppB= mapUp (ppB, alpha, V_buf, prim_elem, im_prim_elem, source, dest);
    3258 
    3259           gcdlcAlcB= mapUp (gcdlcAlcB, alpha, V_buf, prim_elem, im_prim_elem,
     3315          ppA= mapUp (ppA, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3316          ppB= mapUp (ppB, V_buf4, V_buf, prim_elem, im_prim_elem, source, dest);
     3317
     3318          gcdlcAlcB= mapUp (gcdlcAlcB, V_buf4, V_buf, prim_elem, im_prim_elem,
    32603319                            source, dest);
    32613320
     
    32653324          CFList list;
    32663325          TIMING_START (gcd_recursion);
     3326
     3327          V_buf4= V_buf;
    32673328
    32683329          //sparseInterpolation
     
    33573418            {
    33583419              DEBOUTLN (cerr, "ppH before mapDown= " << ppH);
    3359               ppH= mapDown (ppH, prim_elem, im_prim_elem, alpha, u, v);
     3420              ppH= mapDown (ppH, prim_elem_alpha, im_prim_elem_alpha, alpha, u, v);
    33603421              ppH /= Lc(ppH);
    33613422              DEBOUTLN (cerr, "ppH after mapDown= " << ppH);
     
    35793640                            "time for recursive call: ");
    35803641      DEBOUTLN (cerr, "G_random_element= " << G_random_element);
     3642      alpha= V_buf;
    35813643    }
    35823644
     
    36603722            G_random_element=
    36613723            monicSparseInterpol(ppA(random_element, x), ppB (random_element, x),
    3662                                 skeleton, Variable(1), sparseFail, coeffMonoms,
     3724                                skeleton, x, sparseFail, coeffMonoms,
    36633725                                Monoms);
    36643726          else
    36653727            G_random_element=
    36663728            nonMonicSparseInterpol(ppA(random_element,x), ppB(random_element,x),
    3667                                     skeleton, Variable (1), sparseFail,
     3729                                    skeleton, x, sparseFail,
    36683730                                    coeffMonoms, Monoms);
    36693731          TIMING_END_AND_PRINT (gcd_recursion,
     
    37873849                                "time for recursive call: ");
    37883850          DEBOUTLN (cerr, "G_random_element= " << G_random_element);
     3851          alpha= V_buf;
    37893852        }
    37903853
Note: See TracChangeset for help on using the changeset viewer.