GMP 5.1.1: Valgrind reports incorrect read in __gmpn_copyd (called from __gmpz_mul_2exp)

Zimmermann Paul Paul.Zimmermann at loria.fr
Thu Feb 21 09:09:13 CET 2013


       Marco,

> I can not find the attached example...

here it is.
Paul

#include <gmp.h>


int main()
{
  const char *N_str = "12829503155796371901948005599687698800131232421021848618253410955780837975750813426780497379502218069115221114865537559275642566670141470017780236359641455453084725498733036849688079298991136210405567412645577397074603110197033718726451574336097885799720016979193360039128969604814324295222270197041572138446880980042881236138465310220447094210328762750403076113770493144351170771973132102711294979331824176410100984952735395165710176702672191528447169881075317468350104557110212377498195732908926272661943047399294602468290825197394708761973978746557539925497938927020381598778614153456503270700816615998051897321426243273542426455003857717471826387394919275266613662862653898150491193727718142833663977379393708979284327279224329540375202525920826922156510924871233220044999425980673757582456715635423463581781163957624844104589333677081034087110706782800085193311832421518963961177821307494408838368163192319618031675471316242717708905215021359234162526155895113759228841401319728324191506728059851236800093777125152807222208956801856425099706254102831872339647415206543563729490500359167627768264991721262178626062928748723475344434258119296007635246491732611554333571479640530167894996304451554775396520073578846734686992252109751981941875211935734651979028409958569778064750594860383265843677040210586702898934888497773184298179636351329214801619014367936422142496034331182455911570726277848056266734674167210276832506373268671973871985292196488571810977334022960830255386530796707451299939367852319431604140789042771014955108705722912456274577770732113972606220918348390749440952778107195246601395475504685404090020633318443728228849856065243983601412462998740492343190571549108065193274861855919463646452960833717869832431731838394872631146466083038085124576255093575895567745318750008006705362522446375997133506317074146109010029168986223917713463161643088674984643536367408883526456716527102988745751860978199863179040405885825365239829775010924292149175696670682407617916564546947249759544975241570339671682209548633301164692756529174668840556961098035280041172548958193824971332193703865217356698831258505040950067416079014681700942259995279127807847538356441584148815471994558522940422743036510888471313944829567535156861787667192991014695325781565995660888970592225225377640890091032020760516182754527661409242682273641992913725242926118188867763513";
  mpz_t N, temp1, R2;
  int Nbits;
  
  mpz_init (N);
  mpz_set_str (N, N_str, 10);

  Nbits = mpz_size (N) * GMP_NUMB_BITS; /* Number of bits, rounded
                                           up to full limb */
  mpz_init (temp1);
  mpz_init (R2);
  mpz_set (R2, N);
  
  /* Error occurs here. It does NOT occur with N in place of R2 */
  mpz_mul_2exp (temp1, R2, Nbits);

  mpz_clear (temp1);
  mpz_clear (R2);
  mpz_clear (N);
  
  return 0;
}


More information about the gmp-bugs mailing list