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