diff --git a/htdocs/core/lib/barcode.lib.php b/htdocs/core/lib/barcode.lib.php
index f83ea5f433c..67b51748d3e 100644
--- a/htdocs/core/lib/barcode.lib.php
+++ b/htdocs/core/lib/barcode.lib.php
@@ -74,11 +74,11 @@ function barcode_print($code, $encoding="ANY", $scale = 2 ,$mode = "png")
dol_syslog("barcode.lib.php::barcode_print $code $encoding $scale $mode");
$bars=barcode_encode($code,$encoding);
-
- if (! $bars)
+ if (! $bars || ! empty($bars['error']))
{
// DOLCHANGE LDR Return error message instead of array
- $error='Bad Value '.$code.' for encoding '.$encoding;
+ if (empty($bars['error'])) $error='Bad Value '.$code.' for encoding '.$encoding;
+ else $error=$bars['error'];
dol_syslog('barcode.lib.php::barcode_print '.$error, LOG_ERR);
return $error;
}
@@ -133,7 +133,7 @@ function barcode_encode($code,$encoding)
dol_syslog("barcode.lib.php::barcode_encode Use barcode_encode_ean");
$bars=barcode_encode_ean($code, $encoding);
}
- else if (file_exists($genbarcode_loc))
+ else if (file_exists($genbarcode_loc)) // For example C39
{
/* use genbarcode */
dol_syslog("barcode.lib.php::barcode_encode Use genbarcode ".$genbarcode_loc." code=".$code." encoding=".$encoding);
@@ -252,10 +252,11 @@ function barcode_encode_genbarcode($code,$encoding)
$code=preg_replace("/[\\\|]/", "_", $code);
$command=escapeshellarg($genbarcode_loc);
- $paramclear=" \"".str_replace("\"", "\\\"",$code)."\" \"".str_replace("\"", "\\\"",strtoupper($encoding))."\"";
-
+ //$paramclear=" \"".str_replace("\"", "\\\"",$code)."\" \"".str_replace("\"", "\\\"",strtoupper($encoding))."\"";
+ $paramclear=" ".escapeshellarg($code)." ".escapeshellarg(strtoupper($encoding));
+
$fullcommandclear=$command." ".$paramclear." 2>&1";
- //print $fullcommandclear."
\n";
+ //print $fullcommandclear."
\n";exit;
dol_syslog("Run command ".$fullcommandclear);
$fp=popen($fullcommandclear, "r");
@@ -273,14 +274,20 @@ function barcode_encode_genbarcode($code,$encoding)
}
//var_dump($bars);
$ret=array(
- "encoding" => trim($encoding),
"bars" => trim($bars),
- "text" => trim($text)
+ "text" => trim($text),
+ "encoding" => trim($encoding),
+ "error" => ""
);
//var_dump($ret);
- if (!$ret['encoding']) return false;
+ if (preg_match('/permission denied/i',$ret['bars']))
+ {
+ $ret['error']=$ret['bars']; $ret['bars']='';
+ return $ret;
+ }
if (!$ret['bars']) return false;
if (!$ret['text']) return false;
+ if (!$ret['encoding']) return false;
return $ret;
}