Browse Source

Pas de bol, en sqlite, et sur certains mysql (?) la sérialization PHP d’objets ayant des méthodes privées

envoie des caractères \0 que le quote sqlite détruit (ça coupe le reste de la chaine), ce qui
rendait innopérant le cache méta de l’IPSet.
Du coup, on le stocke en plus en base64.
pull/2/head
Matthieu Marcillaud 2 years ago
parent
commit
d95ae2a4cb
  1. 2
      inc/ipset.php
  2. 29
      ipset_options.php

2
inc/ipset.php

@ -77,7 +77,7 @@ function ipset_update_ips_cache() : \Wikimedia\IPSet {
spip_timer('ips');
include_spip('lib/IPSet/src/Wikimedia/IPSet');
$ipset = new \Wikimedia\IPSet($ips);
ecrire_config("ipset", $ipset);
ecrire_config("ipset", base64_encode(serialize($ipset)));
spip_log("IPSet calculé en " . spip_timer('ips'), 'ipset');
return $ipset;
}

29
ipset_options.php

@ -17,7 +17,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* Retourne un IPSet : pour vérification rapide d’une IP sur les ranges d’ip des auteurs.
* @return \Wikimedia\IPSet
*/
function ipset_get() {
function ipset_get(): \Wikimedia\IPSet {
/** @var $ipset \Wikimedia\IPSet */
static $ipset = null;
@ -27,20 +27,33 @@ function ipset_get() {
// Retourner le cache des IPs compilé si déjà calculé.
// Selon la méthode de cache, la classe IPSet doit être connue !
if (!defined('_VAR_MODE') or _VAR_MODE !== 'recalcul') {
if ($ipset = ipset_get_cache()) {
return $ipset;
}
}
spip_log("Cache ipset absent -> calcul", 'ipset');
include_spip('inc/ipset');
return ipset_update_ips_cache();
}
/**
* Retourne le cache meta IPSet global
* @return \Wikimedia\IPSet
*/
function ipset_get_cache(): ?\Wikimedia\IPSet {
include_spip('inc/config');
include_spip('lib/IPSet/src/Wikimedia/IPSet');
$ipset = lire_config('ipset');
if (
$ipset
and $ipset = @unserialize(base64_decode($ipset))
and $ipset instanceof \Wikimedia\IPSet
and (!defined('_VAR_MODE') or _VAR_MODE !== 'recalcul')
) {
return $ipset;
}
spip_log("Cache ipset absent -> calcul", 'ipset');
include_spip('inc/ipset');
return ipset_update_ips_cache();
return null;
}
/**
@ -48,7 +61,7 @@ function ipset_get() {
* avec memo en session
* @return bool|int Id auteur, sinon false.
*/
function ipset_access_author() {
function ipset_access_author(): ?int {
if (isset($GLOBALS['visiteur_session']['ip_id_auteur'])){
return $GLOBALS['visiteur_session']['ip_id_auteur'];
@ -79,5 +92,5 @@ function ipset_access_author() {
return $id_auteur;
}
return false;
return null;
}
Loading…
Cancel
Save