facebook google+ twitter linkedin

Biferno Release Notes

Version: 1.6 (09/12/2008)




Change (breaks compatibility)

ID: 188] IMPORTANT: Err_IllegalDestructor 11/03/2008

A variable of scope application or persistent cannot be Undef-ed in a script other than Biferno.config.bfr if one of the following is true:

- it is an array
- it is an instance of a biferno-implemented class
- it is an instance of a C-implemented class that wants destructor 
  (file, db, multipart etc..)
Note that elements and properties of (application or persistent) array or classes CAN be Undef-ed.

Besides, variables of scope application or persistent cannot be reinitialized in a script other than Biferno.config.bfr if one of the following is true:

- they are instances of a C-implementd class that wants destructor 
  (file, db, multipart etc..) 
- they contain elements (for array) or properties (for classes)  that are 
instances of a C-implemented class that wants destructor.

These two changes were needed in order to fix a bug related to multithread access on variables.

session variables are not affected.

ID: 193] Persistent variables 17/04/2008
The binary-file format of persistent variables (ie the file [app_name].x.bfr in BifernoHome/Persistent) has changed. Note that that file is useful only after biferno crashes. Anyway, if a file with old format is found, it is not loaded and only the regular text file ([app_name].s.bfr) is loaded.

Crash Bug Fixes

ID: 187] Memory crash reporting error 07/02/2008
The Log function caused a buffer overflow when the error message was very long. For example some smtp class network errors on windows caused this bug. Fixed.

Bug Fixes

ID: 184] Expanding an array 23/01/2008
A bug was fixed when an array was expanded as in:

a = array()
(The last added item remained undefined )

ID: 190] Bad error Err_IllegalConstantExpression 08/04/2008
When an array was cloned, the type and scope of elements were not always copied. This sometimes caused an unmotivated Err_IllegalConstantExpression error.

ID: 191] Super object and fixed size 08/04/2008
The flags of super objects are the same of this, but the "Fixed Size flag" must be that of the source object (internal)

ID: 192] Err_IllegalScopeForObject 08/04/2008
Err_IllegalScopeForObject was not returned for legal array containing classes of illegal scope. Fixed.

ID: 201] array in multiple statements line 02/09/2008
Fixed a spurious bug in statements like: a[1] = a[2] = 'foo'

ID: 202] Conditional expressions 02/09/2008
Random bug fixed in some logic statements like: if (long(a) < 1 || long(a) > 20)

ID: 204] Threads timeout 15/09/2008
Sometimes the threadTimeout error caused Biferno to quit. Fixed.


ID: 199] copying file variables 02/09/2008
The file class clone behaviour was modified. When duplicated a file variable will not create anothe reference to the file, but simply increment a counter to the same reference. (see note 176, copying db variables Changes, 20/12/2006)

ID: 206] fKeepCon and IIS Windows - 02/12/2008
ISAPI ServerSupportFunction with HSE_REQ_SEND_RESPONSE_HEADER_EX is now used to set the field fKeepConn when the connection has to be kept alive.

Check that "Allow IIS to control password" in IIS Admin is not checked.
Previous versions of BifernoISAPI did not call ServerSupportFunction thus ignoring the "Allow IIS to control password" setting. Now, if that box is checked, IIS checks password, in addition to possible check performed by Biferno and this can lead to different behaviour in user access management of the site.


ID: 185] Leopard MacOSX - 23/01/2008
Leopard and XCode 3 compilation. Installer was also updated.

ID: 186] Dynamic Charset 05/02/2008
Added preference CHAR_SET in biferno.conf to set Encode/Decode character table; 1=UNIX, 2=MACOS. Default is UNIX on Win/Linux platform and MACOS on MacOSX. For new installations default is always UNIX (also for Mac).

ID: 189] Undef on variables of class extending another class 11/03/2008
When an Undef was called on an object with a super (of the extended class) the memory allocated for the super obj was not immediately released but finished in the garbage collection at the end of the script.

ID: 194] curScript GetIncludeStack 02/09/2008
Added method GetIncludeStack() of class curScript that returns an array of paths representing the include stack of the script.

ID: 195] object GetSuper 02/09/2008
Added method GetSuper of class object that returns the super of the object (if any).

ID: 196] StackItem includeIndex and thisObj 02/09/2008
StackItem.includeIndex returns the file containing the function (or method) as an index in the include stack. StackItem.thisObj returns the this of the method in execution.

ID: 197] parameter onlyArguments in GetTotVariables 02/09/2008
Added parameter onlyArguments in curScript.GetTotVariables to obtain only the arguments of the current function (or main).

ID: 198] class collection 02/09/2008
New class collection as a list of variables. The difference with array is that the variables can be of different class.

ID: 200] Added BAPI_GetIncludeStack and BAPI_GetListTotVariablesExt 02/09/2008
Added BAPI_GetIncludeStack and BAPI_GetListTotVariablesExt to implemente curScript.GetIncludeStack() and onlyArguments curScript.GetTotVariables parameter.

ID: 203] Debug page redesigned 02/09/2008
The Debug page was redesigned with:
- new graphic
- show this and super
- include stack
- hilite arguments in stack

Error report enanchements

ID: 205] Biferno Bad Urls Errors 01/12/2008
When an error i caused by a bad url sent to Biferno, e shorter message is emailed to the developer, containing only the pageIn parameter with subject: "Biferno bad url".

Version: 1.4 (26/09/2007)


Enanchements in this version include:
- better bifernoadmin
- MacOSX universal binary
- MacOSX improved installer
- text/xml HTTP content type
- minor fixes in Walk folder
- bug fix on redirect with Apache

Many bugs have been fixed. Users are strongly encouraged to install this update. Check the complete release notes for a detailed description of the changes and fixes of this version.


Crash Bug Fixes

ID: 158] ref target 17/07/2006
The target propriety of ref class was sometimes bugged (Ref_GetTarget) when ref contained also properties.

ID: 159] Error line position and Err_ReturnValueRequired 17/07/2006
When Err_ReturnValueRequired was returned the position in line (currentOffset) was wrong.

ID: 160] this in Constructor 17/07/2006
The line: temp = this caused a crash if called in constructor method (this is yet in volatile list). Fixed (this cloned in this special case, also if it is in volatile). Note that temp = &this in constructor causes an error because this is volatile in that method.

ID: 163] mod_biferno and big requests 17/07/2006
Crash of mod_biferno when request was bigger than 255 chars (printf in code). Fixed.

ID: 177] Polymorphism 16/12/2006
If a parametere in a method/function was declared of class "class1" and an object was passed of class "class2" (where class2 extends class1) a typecast was tried. Now the object is not modified, allowing real polymorphism.

Bug Fixes

ID: 151] Mail notification on error 04/05/2006
When the error notified was a "Class" specific error (i.e. ErrDBMSError), its name in the mail subject was "Unknown Error". Fixed.

ID: 152] Walk of class folder Unix - 04/05/2006
Alias (symlink) files were not filtered with the "suffix" parameter, fixed.

ID: 154] global err.classNote 19/05/2006
In some cases the global err.classNote returned random chars (ÌÌÌÌÌ...). Fixed.

ID: 155] Global err not initialized 17/07/2006
Sometimes the error variable (global err) was not initialized after an error (all fields empty). Consequently, the custom debug page (debug.x.bfr) caused an error Fixed (added errUpdated field in flower.h).

ID: 156] ErrNullSizeBlock 17/07/2006
Spurious ErrNullSizeBlock errors were returned when ref variables were used (0 propDim but propBlockRef != 0). Fixed.

ID: 157] Error line position and Err_ReturnValueRequired 17/07/2006
In some cases the current position in line (currentOffset) was not correctly set (GetParamSmart did not reset "bRecP->currentCtx.currentOffset" and did not call resetError on success).

ID: 166] unsigned.ToTime bug 17/07/2006
unsigned.ToTime returned bad results when the DATE_FORMAT app pref was not "m/d/y". Fixed.

ID: 167] property and a method with the same name 17/07/2006
When a property and a method in a class have the same name, the property is always returned if the following char is not a '('. For example the call curScript.ValueOf("myClass.myProp") returns the property (before it called the method. fixed).

ID: 168] bifernoadmin save Unix - 29/11/2006
When a file was saved in bifernoadmin, the owner was changed to biferno and permission reset. This was due to the creation of an intermediary temp file and a final file exchange. Fixed (temp file avoided).

ID: 170] POSTMAX and apache 64-bit 29/11/2006
The check of big http post data (POSTMAX form action parameter) failed in 64-bit apache biferno module. Fixed.

ID: 172] UrlEncode 29/11/2006
If parameter spacetoplus of UrlEncode was true, also the newline were substituted with +. Fixed.

ID: 174] Redirect bug with apache >= 2.0.59 29/11/2006
The redirect was not working anymore with apache version >= 2.0.59. The problem was due to an additional field to set (reqP->status) in apache module. Fixed.

ID: 178] Mysql Prepared Cursor 11/12/2006
Sometimes, when a prepare cursor failed, a bad error message was reported (sometimes causing crash).

ID: 179] Error messages 20/12/2006
The error messages composing function colud lead to endless loop if an error occurred during display of variable value.

ID: 180] return in functions block 08/06/2007
A (wrong) syntax error was throwed when a return was folled by multiple close/open tags as in:

function myFunc()

ID: 183] Smtp authentication 25/09/2007
The smtp authentication (auth plain) was bugged if the username was different from the "from" field. Fixed


ID: 176] copying db variables 20/12/2006
The db class clone behaviour was modified. When duplicated a db variable will not create anothe connection to the db, but simply increment a counter to the same connection.


ID: 153] Walk of class folder 04/05/2006
Only the last part (after last period) of the suffix paramter were used in the walk method. For example suffix like .tar.gz were equivalent to .gz. Now all the suffix (after the first period) are interpreted.

ID: 161] request.scheme and request.port 17/07/2006
request.scheme (http, https) and request.port (80, 443 etc..) have been added. Nevertheless it seems that Apache return always "http,80" also in SSL requests (can be useful for future versions of Apache).

ID: 162] bifernoadmin and https 17/07/2006
Some adjustments in bifernoadmin with https. In particular, Redirect obtained with "http-meta equiv".

ID: 164] request.url improved 17/07/2006
request.url accepted only urls not longer than 512 chars, now unlimited.

ID: 169] pop3 29/11/2006
Added pop3 to win and osx distributions (linux is waiting)

ID: 171] text/xml (or text/...) content-type 29/11/2006
A control was added that checks if http header content-type is text/... In that case the body is not parsed (i.e. not interpreted as name-value pairs). The content can be found in pageIn.body.

ID: 175] Universal Binary MacOSX - 29/11/2006
Now Biferno and all its components are compiled as Universal Binary and tested on Intel based MacOSX machines. Developer note: ntohl and htonl have been centralized in XNetworkToHost and XHostToNetwork.

ID: 181] &amp; in url 25/09/2007
The sequence "&amp;" is now accepted in url/post data (compatibility with some browsers or email clients).

ID: 182] curApp.childrenHomes 25/09/2007
The method curApp.childrenHomes has been added that returns an array containing the base paths of the children applications (uses BAPI_GetGenericAppInfo).

Packaging fixes

ID: 173] Apache 2 detection MacOSX - 29/11/2006
The osx postinstall script has been rewritten for better detection of apache version. Now checks for apache, apache2 or apache22 and installs the correct biferno module. Besides use apxs to get the modules directory and httpd -V to get httpd.conf location.

Version: 1.3 (02/05/2006)


Enanchements in this version include:
- 64-bit linux and ipv6 compatibility
- Apache 2.2 module
- New class to obtain stack description (StackItem)
- MacOSX Cocoa System Preference Panel
- New customizable debug error page
- Multiple email notifies on error
- Better formatted log files

Many bugs have been fixed (some relating to script timing and timeouts). Users are strongly encouraged to install this update. Check the complete release notes for a detailed description of the changes and fixes of this version.


Crash Bug Fixes

ID: 120] Error in function with ref parameters called by another function 22/09/2005
A crash could occur if an error happened in a function with by ref parameters called by another function. In fact in certain cases the variable list of the caller function was disposed (on error) and the ref pointed to null if it was referencing a variable of caller. Fixed.

ID: 128] folder class constructor 29/11/2005
When the argument of the folder constructor is a path beginning with '/' (web server relative) and the folder doesn't exist, local script can crash instead of returning the "folder not found" error.

Bug Fixes

ID: 124] XLib GetTicks Unix - 14/11/2005
The GetTicks function of XLib has been centralized on Unix. Now the code in Biferno is always called (the BAPI library contains only a bridge to Biferno). This way the startup ticks used by the function is initialized properly and unique for all Biferno extensions.

ID: 129] ErrTimeout 29/11/2005
Sometimes an error ErrTimeout was mistakenly returned on very fast script. This was because the duration of the script was shorter than the computer clock precision, leading to negative (but unsigned!) durations. Fixed.

ID: 130] Bifernoctl log messages 29/11/2005
Sometimes spurious log messages were logged by Bifernoctl due to log strings not correctly 0-terminated. Fixed.

ID: 131] Stack overflow 29/11/2005
When a script uses very much stack space Biferno launches a new thread (with new stack) for the same script in order to continue the execution without problems (these are rare one-script-many-thread executions). When the script is under critical section (see functions lock, unlock) the new thread could hang forever. To avoid deadlock an error Err_StackOverflow is returned if the stack exceeded limits and execution is in critical section (very rare bug).

ID: 139] Plus before number 27/04/2006
Expressions like: a = +1 caused a syntax error, fixed.

ID: 145] Session random expires 27/04/2006
Sometimes the session variables expired before the timeout time. This was due to a difference between times returning -1 as the result. Fixed.

ID: 150] Array properties 04/05/2006
When a class had a property of class array, the code

could cause an error. Fixed.


ID: 140] Err_StackOverflow 27/04/2006
The error Err_StackOverflow is now returned when a script uses too much stack space (before, additional threads were spawned).

ID: 142] BAPI 1.0.5 27/04/2006
Some changes have been made to the BAPI framework. Extensions must be recompiled (older extensions will not be loaded -> Err_BAPI_ExtensionTooOld). struct ParameterRec changed, BAPI_Doc added fileOffset in BAPI_Bifernoident. Added methods: BAPI_GetStack; BAPI_GetErrorMsgRecord; BAPI_GetListTotVariables; BAPI_GetListIndVariable; BAPI_GetCurrentFileOffset; BAPI_LocateObj; BAPI_IsVariableHidden; BAPI_GetSID;

ID: 146] mysql4 27/04/2006
mysql4 extension si now installed in "Extension" folder (before it was installed in inactive). mysql3 is not distributed anymore.

ID: 148] SendMailAsync 27/04/2006
If the filePath parameter of smtp.SendMailAsync was empty the spool file was written in the same folder of the calling script. In many cases this could cause permission error. Now the file is written in "BifernoHome/BifernoSpool" if not specified differently by that parameter.


ID: 119] Biferno user in login window MacOSX - 15/09/2005
The property shell of Biferno user has been modified to "/usr/bin/false" so that it doesn't appear in login window.

ID: 121] mysql connection port 10/10/2005
In the string connection of mysql the port number can now be added to the server name as in: "localhost:8080 ....".

ID: 122] symlink Unix - 24/10/2005
Added method symlink of class file. The target of the symbolic link must be a unix path and can also be relative ("../" etc...).

ID: 123] 64-bit compatible Linux - 14/11/2005
The biferno module for apache has been recompiled in 64-bit mode in order to run inside an Apache_64 version. Not that the Biferno daemon remains a 32-bit application.

ID: 125] ipv6 compatible 14/11/2005
Biferno is now compatible with ipv6 enabled Apache. In particular the SID stored in user's cookie to track session variables now accepts also semicolon and A-F a-f esadecimal letters.

ID: 126] Persistent file storage 14/11/2005
The files for persistent variables (.s.bfr and .x.bfr) are now stored in the folder "Persistent" inside BifernoHome. Previous versions stored them in the applications folder sometime causing permissions error when the user biferno tried to handle them. Compatibility is preserved (old files are moved and renamed automatically).

ID: 127] Multiple mail error notify and FROM_MAIL application param 29/11/2005
When an error occurs, more than one user can be notified. The field WEBMASTER can now contain multiple mail addresses (comma separated). In this case the (new) application parameter FROM_MAIL must be defined as a single mail address to be used as "from" for the error mail message.

ID: 132] Persistent files 29/11/2005
More checks on Persistent files to avoid inconsistent file formats crashes.

ID: 133] Better log file 12/12/2005
The BifernoServer.log file has now a better format. Besides the log has been splitted with an extra file containing startup/reload unformatted messages.

ID: 134] Apache 2.2 module Unix - 26/04/2006
Biferno module for Apache 2.2 now available

ID: 137] curScript.GetStack and StackItem class 27/04/2006
The method GetStack has been added to the curScript class and the new class StackItem has been added. With these utilities the developer can obtain informations about the stack at every point during the script execution. They are especially useful while developing a custom debug page (see the release note ID 136 "Customizable error page").

ID: 138] GetIndVariableRef 27/04/2006
The method GetIndVariableRef has been added to class curScript. As opposite to GetIndVariable the value returned by the new method is the reference (ref object) to the variable requested (GetIndVariable returns a copy of the variable). Besides, the parameter stackIndex (meaningful only when the scope is "local") has been added to both methods in order to obtain local variables other than that of the current function.

ID: 141] ref.GetTargetInfo 27/04/2006
The method GetTargetInfo has been added to class ref. The method returns the name (followed by property names, if any) of the target object. In addition the scope and the stackIndex of the target are returned as ref parameters.

ID: 143] New Cocoa BifernoPanel MacOSX - 27/04/2006
BifernoPanel can be installed to start/stop (reload, etc..) Biferno from the System Preference Panel.

ID: 149] Apache modules on osx MacOSX - 01/05/2006
Added copies of all apache modules in BifernoHome/ApacheModules

Error report enanchements

ID: 135] Error in Url 27/04/2006
When the url parsing generated an error all the variables in the error page had invalid values (reporting the text: "MessageNotHandled"), fixed.

ID: 136] Customizable error page 27/04/2006
The developer can now write his own debug page. The application variable DEBUG_PAGE can be used to indicate the path of a particular debug page to be called on error (instead of the default Biferno Error Page). An example of new (and powerful) debug page can be found at [BifernoHome]/bifernoadmin/DebugPage/debug.x.bfr. The variable DEBUG_PAGE_LIMIT, if set, indicates the maximum dimension (in Kb) of values reported in the debug page (in order to avoid the generation of very heavy result pages containing, for example, big multipart file objects).
To use the Tabasoft debug page (above) add to Biferno.config.bfr the two lines:

DEBUG_PAGE = biferno.home + "bifernoadmin/DebugPage/debug.x.bfr";

These two lines, for new installations, are added automatically in Biferno config.

Version: 1.2 (14/09/2005)


This version includes some enhancements and bug fixes in various parts of Biferno.
Among others:
- SMTP code modified to allow SMTP authentication and attachments on emails.
- The method IsEMail of class string has been updated.
- Support for prepared queries has been added to mysql extension.
- Another version of the Apache module compatible with the Linux Trustix distribution has been added.

Many bugs have been fixed and error reports improved. Users are strongly encouraged to install this update. Check the complete release notes for a detailed description of the changes and fixes of this version.


Crash Bug Fixes

ID: 97] mysql extension 16/02/2005
Calling FetchRec on a mysql db connection after a non-select statement (insert, update etc..) could cause a crash.

ID: 106] char operations 16/05/2005
Operation and comparison between char objects could cause a crash in some circumstances. See bug 22 .Fixed.

ID: 111] Endless loop on return 26/05/2005
The code after e return statement was not correctly skipped. In particular, if such code contained syntax errors an endless loop was initiated. Some bugs were also fixed when code containing particular flow controls (for, while and switch) was skipped.

ID: 118] jclass crash in Tiger MacOSX - 02/09/2005
A crash happens when the lib "libjvm.dylib" is not found by the biferno extension "jclass_bfr.so". Fxed. See bug 23

Bug Fixes

ID: 91] Class cookie 09/09/2004
In the methods "Set" and "SetPersistent" of class "Utils/cookie" the method GMT() was called twice on the user expire date. Thus the resulting time value (and the cookie itself) could be not valid.

ID: 93] Month in time class 11/01/2005
When the month property of time object is set to 1 and we decrement it by 1, the year property is not recomputed by Biferno:

t = time ("01/01/2005", "d-m-y") 
t.month -= 1 
$t // 01/12/2005 instead of 01/12/2004
See bug 14

ID: 98] Question mark after number 21/03/2005
A question mark immediatley following a number caused a BadSyntax error. For example:

was written
$a==3? "ok":"no"$
to work around the bug. Now fixed.

ID: 100] Sendmail on error 21/03/2005
When an error occurred and an email was sent to WEBMASTER, the SendMailAsync of Biferno created the spool file in the same folder of the error script. This can cause a permission error if the biferno has not the permission to write in the folder. To fix this now the spool files are always created in the folder: BifernoHome/BifernoSpool.

ID: 104] Multipart assignment 21/04/2005
Assignment of a multipart variable to another (clone, a=b) caused an error if the multipart copied was empty. Fixed.

ID: 105] Error in the error page 29/04/2005
When an error occurred in the ERROR_PAGE script a bad HTTP header was sent to the browser. Fixed.

ID: 108] undefNull parameter in FetchRec 16/05/2005
Setting undefNull parameter to true in FetchRec method of class db had no effect. Now it has been modified to work properly. In particular, when undefNull is true, null values are returned in the fetch array as particular strings. The property db.null can then be used to check for null values, as in:

rec = myDB.FetchRec(, true)
if (rec[1] == db.null)
  // is null ... 

ID: 110] Walk of class folder 25/05/2005
When the suffix "*" or "*.*" was passed to Walk of class folder the callback was never called. Fixed. Note that now "" returns all files and the text before . in suffix is ignored.


ID: 95] BAPI 1.0.4 11/02/2005
A method to get the target of a reference from an extension (BAPI_GetReferenceTarget) has been added. Besides, "BAPI_BufferToObj" now checks for ref objects. Total compatibility with previous versions. Error "Err_VariableDuplicatedInURL" added.

ID: 99] GET POST Input variables 21/03/2005
URL and Forms variables input syntax have some limitations. In particular, given the URL as couples of Name=Value pairs the following rules apply: Name expressions cannot contain constructor other than that of primitive class. Value espressions are always evaluated as strings, also if they contain constructors. Examples:

myUrl?int(a)=1       // a is a int of value: 1
myUrl?array(a)=1     // error (constructor in Name not of primitive class)
myUrl?a=int(a)       // a is a string of value: "int(a)"

ID: 109] time objects in debug 25/05/2005
Biferno time objects were displayed in debug window in the format defined by application DATE_FORMAT variable. Now the internal object format (i.e. the one passed to constructor) is used when displayed in debug.

ID: 115] Time class operations 30/08/2005
The operator + and - are now illegal on time objects. Previous versions of Biferno allowed them but returned bad values.


ID: 101] Print of an array 21/03/2005
The string representation of array was truncated if an element of the array was not printable (i.e. a not initialized object). Now the method puts empty strings to represent not initialized objects and completes always the array text representation.

ID: 102] SMTP Authentication 23/03/2005
A parameter has been added to methods SendMail and SendMailAsync in order to provide smtp authentication while sending emails. The auth parameter is optional providing backward compatibility. The auth parameter must have the syntax: "authid:password", or only "password" if authorization id is the same as the from parameter.

ID: 103] IsEMail improved 23/03/2005
The method IsEMail of class string has been improved to perform more checks on email syntax.

ID: 107] SendMailWithAttachments 16/05/2005
smtpExt.SendMailWithAttachments was improved using new utility class mailAttach (see Utils folder).

ID: 113] mysql prepared queries 17/06/2005
Biferno mysql extension can now execute prepared queries (needs MySql >= 4.1)

ID: 116] Apache Trustix module Linux - 08/09/2005
Some users reported that the Biferno Apache module didn't work on Trustix Linux distribution. To fix it a version of the module compiled with define _FILE_OFFSET_BITS=64 had to be used. Such a module has been added to the Biferno Linux official distribution. Other Apache distribution, other than that released in Trustix, could use that version of Biferno module if needed.

ID: 117] Tiger MacOSX - 09/09/2005
The version of Biferno for MacOSX has been recompiled on Tiger (OSX 10.4.2, XCode 2.1, gcc 4.0).

Error report enanchements

ID: 92] Dlls loading error message MacOSX - 20/09/2004
There was a bug in the error messages when a dll was not found. In particular the text message regarding a dll load fail was showed also for other non-related errors.

ID: 94] Better error when trying to clone a "db" object 10/02/2005
When a "db" object was passed to a function by copy (instead of reference) an error Err_IllegalOperation was throwed but a clear error message was not displayed. The same happened, in general, when trying to copy a db object. Fixed.

ID: 112] Err_DuplicatedArrayElemName 26/05/2005
When an array was instantiated containing elements with duplicated names the error "DLM_Err_DuplicatedObject" was reported instead of "Err_DuplicatedArrayElemName".

ID: 114] Variables table on error 17/06/2005
After error.Resume is called the variable global err.table contains the value of all variables at error time. In certain cases that table was not correct, now fixed.

Version: 1.1 (08/09/2004)


Thank to the new Biferno xmlDoc class it is now possible to open, create, modify and validate XML documents. It is also possible to navigate XML hierarchical structure and get/set their content and attribute values combining xmlDoc with the other Biferno new XML class: xmlNode.

Moreover, the new Biferno extension jclass allows Biferno code to invoke Java classes directly. Developers can now take advantage of all Java 2 Platform classes in their Biferno web sites. Therefore, if you have developed your own java classes, it is now possible to reuse that code in bfr scripts with no modifications.

Many bugs have been fixed and further enhancements including unix.bash method, MD5 string encryption and an improved string.Decode method.

Check the complete release notes for a detailed description of the (numerous) changes and fixes of this version.


Crash Bug Fixes

ID: 75] Walk folder and user data parameter 09/04/2004
The Walk method of class folder crashed when the user data obj (4th parameter) was a property of an object, as in the following example:

f.Walk(".txt", true, "MyCallBack", &myFile.path)

ID: 84] Return parameter with scope greater than local 21/05/2004
When a function (or method) returned a variable with scope greater than local, a crash could be caused if the returned variable was of a class with a destructor (i.e. multipart). Note that the method "classInfo.cloneIsNeeded" can be used to check if a class has a destructor, that is, it must be cloned (not copied).

Bug Fixes

ID: 66] Encode, UrlEncode and euro char 20/02/2004
The url encode of euro char was not correct (used lowest value instead of highest, as it should do following the release note 50). Besides, Iso latin Encode now uses always greater values for encoding (before only euro used them).

ID: 68] Extension versions 24/02/2004
The versions of the extensions in the distribution were always the same as the version of the biferno loading them (that is, the version of an extension was dependent by which version of biferno was loading it!). Now the versions are independent from the biferno environment. They are related to the biferno package version they were distribuited with.

ID: 73] Local script error messages 24/03/2004
When an error occurred in a local script (and the DEVELOPER_IP variable didn't contain "local"), the error was not displayed (the script processing simply stopped).

ID: 74] GetNextLine of class file 09/04/2004
In some particular cases the error "Err_IllegalOperationOnConstant" was randomly returned.

ID: 81] Walk folder method 05/05/2004
Linux and MacOSX:
if the Walk method was called with parameter recursive to true, and the callback returned a value <> 0 then, on Unix, the walk was aborted only for the current directory, not for the whole process.
if the Walk was called with recursive to true only the folders matching the suffix parameter were inspected.
All Platforms:
if the callback called stop or exit an Err_InvalidParameter error was mistakenly throwed.

ID: 85] Methods returning "ref" return class 21/05/2004
Methods declaring return "ref" class variable were mistakenly accepted. An error "Err_IllegalRef" was not throwed (this is not legal). For functions the error was correctly throwed.

ID: 87] Day of week in time class 12/07/2004
After a set property or operation on a time object the dayOfWeek property was not recomputed by Biferno. As a result that property could return wrong values in subsequent calls. Example:

t = time()
$t.dayOfWeek	// here dayOfWeek retained the old value

ID: 89] BBiferno 1.0.2 MacOS Classic and X - 31/08/2004
The new version of the BBEdit plugin fixs some bugs in the language module regarding color hilight and function list pop-up. Downloadable from here.


ID: 69] FrontBase driver compatibility 24/02/2004
The FrontBase ODBC driver "SQLDescribeCol" method, for INT column, returns 0 (zero) as the max size of the column (maximum length of the column). Now a patch to odbc extension that works around it has been added. In particular now it calls "SQLColAttribute" if the max size is zero. In fact "SQLColAttribute" of FrontBase driver does return the correct value.


ID: 76] BAPI 1.0.3 09/04/2004
Total compatibility with previous versions (BAPI_IsObjRefToDestruct, BAPI_ClonePropertyList, BAPI_GetCurrentScriptStatus added).

Compilation fixes

ID: 80] XCode project of Biferno MacOSX - 03/05/2004
The XCode project of Biferno has been added to the MacOSX sources package. Note that the distribuited binary is yet compiled directly with gcc 3.3 (with Makefile) and the XCode project is given only for debug purpose. Besides, as only the root user can start biferno, if you want to debug Biferno from inside XCode, probably, the best thing to do is to run XCode with the command:

sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode
The argument -i (biferno interactive) is automatically added as first argument of the executable.


ID: 70] unix.bash Unix - 01/03/2004
This function can be used to send command to a Unix shell. It is implemented using the execvp C Unix function invoking the command "/bin/bash -c" + your command. It is installed as inactive. To be used it must be manually moved from BifernoHome/InactiveExtensions to BifernoHome/Extensions (and biferno must be reloaded). See the man page for details

ID: 71] Browser page if biferno crashes (hope never happens!) 09/03/2004
When biferno quitted abnormally en empty page was sent to the browser. This caused some browsers to display the alert "Document contains no data" or a blank page. Now the better page containing error "ErrConnectionBroken" is sent to users.

ID: 72] bifernoctl on unix Unix - 24/03/2004
When bifernoctl (-s) restarts biferno, now it uses the startup biferno script (/Library/StartupItems/Biferno/Biferno on Linux, /etc/rc.d/init.d/biferno on MacOSX) in order to preserve possible env variables defined by the user.

ID: 77] Better string isolatin decode 19/04/2004
The routine of decoding from ISO-8859-1 characters now performs a better check on encoding number strings (i.e. ampersand+sharp+number+semicolon) formatting. In particular it checks for ending ';', accepts only numbers between '#' and ';' and leaves the string untouched if the format is not correct or the character is not known by Biferno (i.e. japanese or others).

ID: 78] jclass - Calling Java code from Biferno 03/05/2004
The Biferno extension jclass allows Biferno code to invoke Java classes directly. Developers can now take advantage of all Java 2 Platform classes in their Biferno web sites. Besides, if they have developed their own java classes, they can reuse that code in bfr scripts with no modifications.
MacOS classic version is not available (>= X required).
For complete documentation see the article "Calling Java code from Biferno" in the web site "Documents" section.

ID: 79] MD5 method of class string 03/05/2004
The new method MD5 of class string computes the MD5 message digest. The digest is always 32 chars in length and represents an hexadecimal number. For details about the MD5 algorithm see RSA Data Security, Inc. MD5 Message-Digest Algorithm. (see also: the man page)

ID: 82] class folder now resolves aliases (sym link) 05/05/2004
Now an alias (or symlink) can be passed to the folder constructor as path parameter. In that case the name and path properties contain the value of the target, not that of the alias. On Win32 aliases are not supported.

ID: 88] New classes xmlDoc and xmlNode 31/08/2004
Thank to the new Biferno xmlDoc class it is now possible to open, create, modify and validate XML documents. Besides, it is also possible to navigate their hierarchical structure and to get/set content and attribute values combining xmlDoc with the other Biferno XML class, xmlNode. xmlDoc and xmlNode are declared by the new xml Biferno extension. MacOS classic version is not available (>= X required). For complete documentation see the article "Managing XML documents with Biferno" in the web site "Documents" section.

Documentation fixes

ID: 67] Lists sorted by name in bifernoadmin Reference section 24/02/2004
The lists of methods, properties, constants and errors of each class are now sorted by name in the Reference section of bifernoadmin. This allows a faster search of members.

ID: 83] Biferno man pages DTD 05/05/2004
The DTD of Biferno xml man pages has been fixed. The DTD is online (tabasoft web site) and all man pages begin with:

<!DOCTYPE bifdoc SYSTEM "http://www.tabasoft.it/biferno/bfdocdtd/bifdoc.dtd">
(this used to be: <!DOCTYPE bifdoc SYSTEM "../bifdoc.dtd">). bifernoadmin executes xml validation every time a page is modified. If a user is not online, he can modify a page, as he ignores the warning note ("can't locate the dtd").

ID: 90] Man pages of members with long names 03/09/2004
Man pages of members with name longer than (or equal) 31 chars, sometimes, where not correctly located by the biferno doc system. Now Fixed.

Packaging fixes

ID: 86] bifernodefs.sh in init script Unix - 23/06/2004
The environment variables that may be needed by biferno at startup (such as LD_LIBRARY_PATH) must now be inserted in the file "bifernodefs.sh" (in /etc/init.d (Linux) or /Library/StartupItems/Biferno (MacOSX)). Such a file, if it exists, is automatically included by the biferno startup script. You should not modify the startup script itself, as the modifications may be overwritten by the installation of future versions.

Version: 1.0.3 (09/02/2004)


Some crash bugs about classes and by reference parameters have been fixed.
Functions have been added to manage oracle BLOB and CLOB locator.
Methods of string class have been added to transform a string between Hex and Bin formats (Bin2Hex and Hex2Bin).
On Unix bifernod can now read script code from stdin.
Other features and better error report/documentation have been added, see the following complete release notes for details.


Crash Bug Fixes

ID: 6] Property as method parameters
when a property was used as a parameter in a class method, some problem arised. Example:

class MyClass
	int MyMethod()
		f = file("myFile")
the accessibility (public, private etc.) of aProperty was checked from the class file perspective and not from the class MyClass perspective. This could (in some cases) cause the interpreter to crash (fixed).

ID: 11] Increment on Ref.target object 16/01/2004
If a reference (ref) object was incremented using the target property (myRef.target++), Biferno crashed due to wrong handling of reference class set property function (BAPI_ReplaceObj requires temp variables as the "value"). (Note that the following command is also correct: myRef++.)

ID: 12] Local class included more than once 19/01/2004
A local class (declared inside a script) containing static properties could crash if included more than once in a single run (multiple includes). This was due to wrong disposing of static class properties at second declaration time.

Bug Fixes

ID: 8] Session variables used in ACCESS_CONTROL
Session variables used in ACCESS_CONTROL script caused an error at the user first access. In fact, at first access, a redirect is executed automatically by Biferno, before initializing the session list, to check if cookies are activated in browser. In this case the ACCESS_CONTROL script was executed anyway, instead of waiting for redirect result, causing session variables (if any in the script) to fail. Fixed.

ID: 9] Empty string to folder constructor 16/01/2004
When an empty string was passed to folder constructor, it was interpreted as the web root instead of the current folder (a '/' was erroneously added).

ID: 10] folder.Walk and aliases (or sym links) Unix - 16/01/2004
folder.Walk on Unix (opendir) executed a stat on files instead of lstat. lstat is better because doesn't follow sym links. Besides the walk stopped with error 2 (file not found) if a sym link (or alias) pointed to non existent files or folder; now, with lstat, it continues.

ID: 64] Content-type text/html in no access page 05/02/2004
When a user was not authorized, the NO ACCESS script (showed to him) missed the "text/html" Content-type default header. This caused some browsers not to interpret html tags in that page.


ID: 62] BAPI 1.0.2 29/01/2004
Total compatibility with previous versions (BAPI_GetStringBlockExt fixed when aCStr is nil et al.). Linked with XLib 1.0.2 (Hex2Num et al.).

ID: 65] OSX biferno user id changed MacOSX - 09/02/2004
The biferno user id has been changed to 430 on OSX to prevent the biferno user from showing up on the login panel. Notice that installing a new biferno version on a machine where the biferno user is already defined will NOT change the used id to 430. Thanks to jfboq@free.fr for suggesting this.


ID: 3] httpPage, header and bad return headers
ErrInvalidHeader and ErrResponseHeaderIsInvalid added to header and httpPage class. They are returned when an header is not well formatted.

ID: 58] LobRead and LobWrite of class db 27/01/2004
Two functions have been added for LOB (Large Objects) handling. Only the oracle driver implements them (as of today). These methods can be useful in case of data > 4K where simple UPDATE/INSERT queries can fail. To modify a LOB field:

	query = "select MYBLOB from MYTABLE where ID=" + id + " FOR UPDATE"
	cursID = mydb.Exec(query)
	lobLocator = mydb.FetchRec(,,true)[1]
	mydb.LobWrite(bLoc, the_content)
To read a LOB field:
	cursID = mydb.Exec("select MYBLOB from MYTABLE")
	lobLocator = mydb.FetchRec(,,true)[1]
The third parameter of FetchRec has been added to cause the lob locators (instead of the data) to be fetched. offset and len method's parameters allow also partial read/write of LOBs.

ID: 60] utils.Alert 28/01/2004
The class "utils" has been created. The first method added is "Alert". It produces a javascript code that, sent to the browser, shows to the user an alert containing a message. Prototype:

static void Alert(string msg, boolean newWin)
If newWin is false a javascript alert panel is showed, otherwise a real new window in the browser is open. The message (msg) is automatically encoded (using "\x"+ISO-NUMBER) before calling the javascript function.

ID: 61] Bin2Hex and Hex2Bin 29/01/2004
New methods of class string to transform a string from binary to hexadecimal and viceversa.

ID: 63] bifernod -p Unix - 29/01/2004
The option -p has been added to bifernod in order to read script code from stdin. Examples are:

echo '<? a = 90; $a ?>' | bifernod -p
bifernod -p < /Documents/myFile.bfr

Error report enanchements

ID: 1] HTML tags in report msg
the "while processing:" error message sometimes contained visible html tags.

ID: 7] GetErrMessage declaration
The error message showed when the GetErrMessage method was not correctly declared was wrong (it used the old name "GetErrDescr").

Documentation fixes

ID: 57] FolderExt 23/01/2004
The comment inside the script source was wrong

Packaging fixes

ID: 59] File "test.bfr" missing from distribution 28/01/2004
The file "test.bfr" (mentioned in the documentation and useful for a quick test of the installation) was missing from certain packages. This problem has been fixed, the file can now be found in the BifernoHome directory.

Version: 1.0.2 (01/12/2003)




Crash Bug Fixes

ID: 16] Indexed element of a non array temporary variable
When an indexed element was requested of a non array temporary variable, sometimes, a crash was caused. (see bug report "GetCurRecs" for details).

ID: 45] Curly brackets not balanced
When curly brackets were not balanced the error report could cause problems (in same cases crash) due to invalid value for curly count (-> -1)

Bug Fixes

ID: 17] Versions MacOSX
The Biferno.acgi app and the WSAPI bundle (plugin for WebSTAR) reported wrong version strings.

ID: 18] error.Resume not effective
error.Resume was not effective if an error occurred inside a single dollar ($, print command) parameter inside biferno tags.

ID: 25] Spurious slashes
Spurious '/' (slash) at the beginning of a line was ignored by the parser. Now it causes (as it should be) Err_BadSyntax.

ID: 26] TypeCasting a ref class
TypeCasting a ref class var (i.e. a var passed by reference) could cause an error if the target variable (pointed by the ref) was an array and the class requested by type cast was "array". Note that in this case no action is needed, because typa cast is performed on the target, but target is already an array.

ID: 28] Refs in array
When a ref variable was added to an array, the clone of the ref variable caused an error (bug in Ref_Clone of class Ref).

ID: 34] Multiline class properties
Declaration of class properties containing new lines inside round bracket caused problems, as in:

class MyClass {
    array	 myProp = array("par",

ID: 37] if-else controls on the same line
if-else controls on the same line without ';' or '{}' caused Err_BadSyntax, as in:
if (a) $a else $"-"

ID: 38] file.Exists and ending slah Unix
On MacOSX and Linux the expression file.Exists("myfile.txt/") returned true if a file "myfile.txt" existed. It must returns false because the ending slash requests explicitely for a folder, not for a regular file.

ID: 39] file's parameter createFileAlways Unix
Calling the file class constructor with createFileAlways flag, in case a file with the same name already existed, caused truncation to zero bytes (instead of substitution) of the old file. Thus the owner of the file remained unchanged and biferno could not execute some operation on it (i.e. setting the right file permission).

ID: 40] Daylight Saving Time Unix
Calling the time class constructor with a string representing a time in which the DST (Daylight Saving Time) was on, caused a wrong shift of 1 hour in the resulting time.

ID: 43] Sessions, global err and pagOut
In application using sessions, if cookie were disabled the global err and global pageOut variables were not defined in error page script. Besides the error page was erroneously executed in error.Resume() mode.

ID: 44] Variables in Destructor method
If an error occurred in a variable Destructor method, the error page was allowed to use that variable (in a non predictable state). Now the error page doen't see user class variables if the error happened in a Destructor.

ID: 48] return command in main block
return command in while and do-while caused Err_CurlyBracketNotBalanced. Besides, return was mistakenly allowed in the main block of the script (now it causes Err_IllegalFlowControl, as expected).


ID: 21] BAPI 1.0.1
Total compatibility with previous versions (callback "BAPI_JavaLoadJVM" and some errors added). Linked with XLib 1.0.1.

ID: 49] biferno user can log Linux
Now the user "biferno" can log to the terminal (/bin/bash has been assigned as default shell, before was /bin/false)

Compilation fixes

ID: 24] Dinamyc settings Windows
Some settings of lib paths in VisualC projects caused problems during compilation. Besides env. variables: BFR_APACHEDIR and BFR_ORACLEDIR have been added in order to specify path of libs for Apache module and oracle extension (examples: BFR_APACHEDIR=C:\Program Files\Apache Group\Apache2 and BFR_ORACLEDIR=C:\Oracle\ora81).


ID: 22] Win32 and dnsapi.dll Windows
Biferno startup failed if the dll "dnsapi.dll" was not found on the computer. Now startup continues. Note that the only calls that need "dnsapi.dll" are: smtp.GetMXRecords() and string.IsEMail() (when parameter exists is true).

ID: 23] MySQL linked dinamically and upgraded to version 4.xx MacOSX
Binary for MacOSX of mysql (version 4.x) extension has been added to the package. It is installed in "InactiveExtensions", so a manual copy is needed if you want to remove mysql ext. and use mysql4 instead (some future version of Biferno will install mysql4 ext. by default). Besides, mysql extensions now link dinamically (at runtime) to libmysqlclient.dylib to avoid hard coded path problems.

ID: 31] httpExt.ExecRemote
The method ExecRemote of class httpExt now takes into account also the "port number" in the URL (after character ":"). Default is "80".

ID: 32] string.In now Zap spaces
The In method of class string didnt' zap spaces and tabs ("gremlins") before and after the text.

ID: 35] string.Encode and xml self closed tag
Encode method of string now can handle also xml self closed tags (<tagname/>).

ID: 42] Stack space check MacOSX
Better check of stack space in case of recursive functions has been implemented

ID: 47] XCode MacOSX
Compiled with Panther gcc3.3 and Project Builder files (ACGI and WSAPI bundle) switched to XCode

Error report enanchements

ID: 14] Operation between square brackets
When an operation between square brackets failed, sometimes, a wrong error message was reported.

ID: 15] Generic operation
Better error message when a generic operation failed.

ID: 19] Error in Destructor
When an error occurred in single dollar parameter, user class variable destructors ("Destructor" methods) were invoked before the composition of the "error page" variables table. As a result the "error page" could report wrong values for that variables.

ID: 20] Error in single dollar parameter
When an error occurred in single dollar parameter, BAPI kExit events were sent to BAPI classes before the composition of the "error page" variables table. So classes that use data allocated in kRun and disposed in kExit, could not handle their object properly in that phase. As a result the "error page" could report wrong values for that variables.
Only class search and db could be affected by this bug.

ID: 27] Line number and print
When the execution of "print" (or $) caused an error, the reported line of the error (in some cases) was not correct.

ID: 29] Type casting an array not explicitely
Type casting an array not explicitely returned Err_IllegalOperation, now returns Err_ExplicitTypeCastRequired.

ID: 30] TypeCast between user classes
When an error of typeCast between user classes is reported, also the scope of the class is displayed

ID: 33] Passing uninitialized var by ref
When passing an uninitialized var by reference and the name was a reserved keyword Err_UndefinedIdentifier was returned instead of Err_ReservedKeyword.

ID: 36] Nested function's parameters spanned across multiple lines
When an error occurred in nested function's parameters spanned across multiple lines, a wrong line number was reported in the error page.

ID: 41] Nested user class methods passed as parameters
Nested user class methods passed as parameters could, occasionally, report wrong error messages if the last method in the chain caused an error. Example:

a = class1()
b = class2()
c = class3()
and Method3() caused an error. The bug happened if the chain was at least 3

ID: 46] Parameter names is longer than 63 chars
Better error report when a parameter name is longer than 63 chars

Version: 1.0.1 (09/10/2003)




Crash Bug Fixes

ID: 52] Error page creation and POST data MacOS Classic
Sometimes, when Biferno was going to return an error page, an endless loop could hang the request. This was due to invalid multiple requests of POST data by Biferno.

ID: 53] index.bfr as DirectoryIndex Unix
Apache module caused Apache to crash if the directive DirectoryIndex (in httpd.conf) contained index.bfr and a page was invoked using only the directory name. Fixed.

Bug Fixes

ID: 50] UrlEncode, UrlDecode
The method UrlEncode (of string) used highest values while UrlDecode used lowest. For example for char (&rsquo;): low is %92, high is %2019. UrlEncode modified to use lower values.

ID: 51] POST data with WebSTAR
Sometimes the process of receiving POST data added a "dummy" char to stream causing wrong data in the script parameters. The affected only web server using WebSTAR.

ID: 54] Redirect is void
Method request.Redirect returns nothing but was declared as returning string, now declared as returning void.

BAPI Bug fixes

ID: 55] Dll declaring more than one entry point
When a dll declared more than one entry point (more than one class), it was closed (at shutdown or reload) more times! Now fixed. Note that, as of today, all BAPI dlls declare only one entry point, so nobody should have seen this bug.

Error report enanchements

ID: 56] Error inside a user class called by another user class
When a class error occurred inside a user class called by another user class, (sometimes) the error page reported a wrong class name.