@@ -142,7 +142,7 @@ static int nxiunlock(int ret)
142
142
/**
143
143
* valid NeXus names
144
144
*/
145
- int validNXName (const char * name )
145
+ int validNXName (const char * name , int allow_colon )
146
146
{
147
147
int i ;
148
148
if (name == NULL )
@@ -158,6 +158,10 @@ int validNXName(const char* name)
158
158
{
159
159
;
160
160
}
161
+ else if (allow_colon && name [i ] == ':' )
162
+ {
163
+ ;
164
+ }
161
165
else
162
166
{
163
167
return 0 ;
@@ -490,6 +494,12 @@ static NXstatus NXinternalopenImpl(CONSTCHAR *userfilename, NXaccess am, pFile
490
494
fHandle -> stripFlag = 0 ;
491
495
am = (NXaccess )(am & ~NXACC_NOSTRIP );
492
496
}
497
+ fHandle -> checkNameSyntax = 0 ;
498
+ if (am & NXACC_CHECKNAMESYNTAX ) {
499
+ fHandle -> checkNameSyntax = 1 ;
500
+ am = (NXaccess )(am & ~NXACC_CHECKNAMESYNTAX );
501
+ }
502
+
493
503
494
504
if (my_am == NXACC_CREATE ) {
495
505
/* HDF4 will be used ! */
@@ -684,7 +694,7 @@ NXstatus NXreopen(NXhandle pOrigHandle, NXhandle* pNewHandle)
684
694
{
685
695
char buffer [256 ];
686
696
pNexusFunction pFunc = handleToNexusFunc (fid );
687
- if ( (nxclass != NULL ) && !strncmp ("NX" , nxclass , 2 ) && !validNXName (name ) )
697
+ if ( pFunc -> checkNameSyntax && (nxclass != NULL ) /* && !strncmp("NX", nxclass, 2) */ && !validNXName (name , 0 ) )
688
698
{
689
699
sprintf (buffer , "ERROR: invalid characters in group name \"%s\"" , name );
690
700
NXReportError (buffer );
@@ -821,7 +831,14 @@ static int analyzeNapimount(char *napiMount, char *extFile, int extFileLen,
821
831
NXstatus NXmakedata64 (NXhandle fid , CONSTCHAR * name , int datatype ,
822
832
int rank , int64_t dimensions [])
823
833
{
834
+ char buffer [256 ];
824
835
pNexusFunction pFunc = handleToNexusFunc (fid );
836
+ if ( pFunc -> checkNameSyntax && !validNXName (name , 0 ) )
837
+ {
838
+ sprintf (buffer , "ERROR: invalid characters in dataset name \"%s\"" , name );
839
+ NXReportError (buffer );
840
+ return NX_ERROR ;
841
+ }
825
842
return LOCKED_CALL (pFunc -> nxmakedata64 (pFunc -> pNexusData , name , datatype , rank , dimensions ));
826
843
}
827
844
@@ -842,7 +859,14 @@ static int analyzeNapimount(char *napiMount, char *extFile, int extFileLen,
842
859
NXstatus NXcompmakedata64 (NXhandle fid , CONSTCHAR * name , int datatype ,
843
860
int rank , int64_t dimensions [], int compress_type , int64_t chunk_size [])
844
861
{
862
+ char buffer [256 ];
845
863
pNexusFunction pFunc = handleToNexusFunc (fid );
864
+ if ( pFunc -> checkNameSyntax && !validNXName (name , 0 ) )
865
+ {
866
+ sprintf (buffer , "ERROR: invalid characters in dataset name \"%s\"" , name );
867
+ NXReportError (buffer );
868
+ return NX_ERROR ;
869
+ }
846
870
return LOCKED_CALL (pFunc -> nxcompmakedata64 (pFunc -> pNexusData , name , datatype , rank , dimensions , compress_type , chunk_size ));
847
871
}
848
872
@@ -944,16 +968,20 @@ static int analyzeNapimount(char *napiMount, char *extFile, int extFileLen,
944
968
NXstatus NXputattr (NXhandle fid , CONSTCHAR * name , void * data ,
945
969
int datalen , int iType )
946
970
{
971
+ char buffer [256 ];
947
972
pNexusFunction pFunc = handleToNexusFunc (fid );
948
973
if (datalen > 1 && iType != NX_CHAR )
949
974
{
950
975
NXReportError ("NXputattr: numeric arrays are not allowed as attributes - only character strings and single numbers" );
951
976
return NX_ERROR ;
952
977
}
953
- else
978
+ if ( pFunc -> checkNameSyntax && ! validNXName ( name , 0 ) )
954
979
{
955
- return LOCKED_CALL (pFunc -> nxputattr (pFunc -> pNexusData , name , data , datalen , iType ));
980
+ sprintf (buffer , "ERROR: invalid characters in attribute name \"%s\"" , name );
981
+ NXReportError (buffer );
982
+ return NX_ERROR ;
956
983
}
984
+ return LOCKED_CALL (pFunc -> nxputattr (pFunc -> pNexusData , name , data , datalen , iType ));
957
985
}
958
986
959
987
/* ------------------------------------------------------------------- */
@@ -1000,7 +1028,14 @@ static int analyzeNapimount(char *napiMount, char *extFile, int extFileLen,
1000
1028
1001
1029
NXstatus NXmakenamedlink (NXhandle fid , CONSTCHAR * newname , NXlink * sLink )
1002
1030
{
1031
+ char buffer [256 ];
1003
1032
pNexusFunction pFunc = handleToNexusFunc (fid );
1033
+ if ( pFunc -> checkNameSyntax && !validNXName (newname , 0 ) )
1034
+ {
1035
+ sprintf (buffer , "ERROR: invalid characters in link name \"%s\"" , newname );
1036
+ NXReportError (buffer );
1037
+ return NX_ERROR ;
1038
+ }
1004
1039
return LOCKED_CALL (pFunc -> nxmakenamedlink (pFunc -> pNexusData , newname , sLink ));
1005
1040
}
1006
1041
/* --------------------------------------------------------------------*/
0 commit comments