qt-firefox-gcc34.patch (fix cast) [pld-cvs-commit Digest, Vol 6, Issue 600]

Paweł Sikora pluto w pld-linux.org
Wto, 30 Lis 2004, 23:46:51 CET


On Tuesday 30 of November 2004 13:42, Paweł Sikora wrote:
> On Sunday 28 of November 2004 21:07, pld-cvs-commit-request w pld-linux.org
> wrote:
>
> +--- security/manager/ssl/src/nsPKCS12Blob.cpp.orig
> ++++ security/manager/ssl/src/nsPKCS12Blob.cpp
> +@@ -187,7 +187,7 @@
> +   mToken->GetTokenName(getter_Copies(tokenName));
> +   {
> +     NS_ConvertUTF16toUTF8 tokenNameCString(tokenName);
> +-    slot = PK11_FindSlotByName(tokenNameCString.get());
> ++    slot =
> PK11_FindSlotByName(NS_CONST_CAST(char*,tokenNameCString.get())); +   }
> +   if (!slot) {
> +     srv = SECFailure;
>
> to rozwiązanie, to tylko bardzo brzydki hack.
> zdjecie atrybutu const z obiektu poprzez...
>
> nscore.h:
> #define NS_CONST_CAST(__type, __ptr) const_cast< __type >(__ptr)
>
> ...i pierwsza proba modyfikacji obiektu przez funkcję PK11_FindSlotByName
> może zakończyć się ubiciem aplikacji ponieważ kompilator może umieszczać
> stałe obiekty w obszarach pamięci chronionych przed modyfikacją
> (to już zależy od platformy i specyficznej implementacji).
> jeśli PK11... nie modyfikuje obiektu, to powinna pobierać stały wskaźnik,
> bądź referencję i to ją należy poprawić, a nie dorabiać chore rzutowanie.

w źródłach firefoxa znajduje się poprawna wersja PK11_FindSlotByName(...):

nss/lib/pk11wrap/pk11func.h:
 PK11SlotInfo *PK11_FindSlotByName(const char *name)
nss/lib/pk11wrap/pk11slot.c:
 PK11_FindSlotByName(const char *name)

problem istnieje dlatego, że przy kompilacji pierwsze brane są nagłówki
z /usr/include/nss*, gdzie:

/usr/include/nss/pk11func.h:
 PK11SlotInfo *PK11_FindSlotByName(char *name);

co finalnie przykrywa prawidłowy prototyp firefoxa.
trzeba poprawić nss-devel-3.9.1-1, lub Makefile firefoxa.

-- 
/* Copyright (C) 2003, SCO, Inc. This is valuable Intellectual Property. */

                           #define say(x) lie(x)




Więcej informacji o liście dyskusyjnej pld-devel-pl