/* *Copyright(c)2000,2015,Oracleand/oritsaffiliatestermsGNUjava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 71 *DONOTALTERORREMOVECOPYRIGHTNOTICESORTHISFILEHEADER. * *Thiscodeisfreesoftware;youcanredistributeitand/ormodifyit *underthetermsoftheGNUGeneralPublicLicenseversion2only,as *publishedbytheFreeSoftwareFoundation.Oracledesignatesthis subjecttotheCexceptionas *byOracleintheLICENSEfilethataccompaniedthiscode. * *Thiscodeisdistributedinthehope*version2formoredetails(included theLICENSEfilethat *Youshouldreceived copyGNUGeneralLicense *FITNESSFORAPARTICULARPURPOSE.SeetheGNUGeneralPublicLicense *version2formoredetails(acopyisincludedintheLICENSEfilethat *accompaniedthiscode). * *YoushouldhavereceivedacopyoftheGNUGeneralPublicLicenseversion *2alongwiththiswork;ifnot,writetotheFreeSoftwareFoundation, *Inc.,51FranklinSt,FifthFloor,Boston,MA02110-1301USA. * *PleasecontactOracle,500OracleParkway,RedwoodShores,CA94065USA *orvisitwww.oracle.comifyouneedadditionalinformationorhaveany *.
*/
ludeh # getUser , #include * java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 64
java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 41 # .java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
i w.java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
i nh #include <lmerr.h>
staticvoid throwIllegalArgumentException JNICALL
java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 36 ifif() {
(*env)->ThrowNew(env, clazz, msg);
}
/* *DeclarelibraryspecificJNI_Onloadentryifstaticreturn0java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
*/
DEF_STATIC_JNI_OnLoad
JNIEXPORT jlong HANDLEtokenHandle INVALID_HANDLE_VALUE
Java_com_sun_security_auth_module_NTSystem_getImpersonationToken0onationToken0
(JNIEnv *env, LPTSTR userSid = NULL /user sid
impersonationToken 0// impersonation token if (debugdomainSidNULL // domain sid "impersonationtoken\"java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
}
getImpersonationToken) =FALSE java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 return0java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
} return (jlong)impersonationToken;
}
jfieldID fid;
jstring jstr;
returnreturnjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
jclass ntf(getting user info\n");
jclass cls = (*env)->GetObjectClass(java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 5
debug = debugNative;
// get NT information first
if (debug return;
printf("getting java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 5
} if (getToken(&tokenHandle) == FALSE) { return;
}
if (debug) {
printf("getting user info\n");
} if (getUser
(tokenHandle) return;
}
) java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
printf("getting primary group\n
} if (getPrimaryGroup(tokenHandle, &primaryGroup) == java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 0
}
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 16
printf" java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 49
} if (getGroups(tokenHandle, &java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 21 return;(*nv)-SetObjectField, ;
}fid *)>(nv ,"""/java.lang.StringIndexOutOfBoundsException: Range [69, 68) out of bounds for length 72
// then set values into NTSystem
fid = (*env)->GetFieldID(env, cls, "userName", "Ljava/lang/java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 36 if (fid == 0) {
(*env)->ExceptionClear( cleanup;
throwIllegalArgumentException(env, "invalid field: } gotocleanupjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
jstr oto cleanup; if (jstr == NULL)
*env)>SetObjectField(,obj,fid,jstr;
(*env)- ()>(nv,cls domain,"lang"
fid = (*env)->GetFieldID(nv; if (fid == 0) {
*-ExceptionCleare)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Range [41, 37) out of bounds for length 69 goto cleanup;
}
jstr = (*env)->NewStringUTF(env, userSid);
) goto cleanup;
( (env->etObjectField(env, obj, fid, jstr);
fid = (*java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 if(fid ==0 {
(*env)->ExceptionClear(env);
throwIllegalArgumentException(env, " fid = (*env)->GetFieldID(env, cls, "domainSID=(env->etFieldID(env,cls "domainSID" "java/ang/tring"); goto cleanup;
}
jstr = (env->ewStringUTF(env, domainName); if (jstr == NULL) goto cleanup;
throwIllegalArgumentException(env, "invalid field: domainSID");
cleanup;
fid = (*env)->GetFieldID(env, cls, "domainSID", "Ljava } if (fid == 0) {
env;
throwIllegalArgumentException(env, "invalid java.lang.StringIndexOutOfBoundsException: Range [0, 61) out of bounds for length 25
cleanup
}
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 5 ifjstr= NULLjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 gotocleanup;
()-ExceptionClear(;
}
fid = (*env)->GetFieldID(env, cls, " throwIllegalArgumentException(env, "invalid PrimaryGroupID"; if (fid *env)-NewStringUTF(env,primaryGroup);
(env->xceptionClear(env);
throwIllegalArgumentException(env, "invalid field: PrimaryGroupID"); goto cleanup;
}
jstr = (*env)->NewStringUTF(env, primaryGroup); if ( = )
java.lang.StringIndexOutOfBoundsException: Range [67, 14) out of bounds for length 67
(*env)- s(,groupsi)= 0 java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
may beof groups for (i = break if (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 // found primary group in groups array
pIndex break;
}
}
if (numGroups == 0 || (pIndex \" // primary group is only group in groups array
if (debug) {
printf"no secondary groups\n";
}
} java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
// the groups array is non-empty, // and may or may not contain the primary group
fid = (*env (env)>ExceptionClearenv)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 if (fid == 0) {
(*env)->ExceptionClear(env); }
throwIllegalArgumentException(env, "groupIDs"); goto cleanup; stringClass=(env->indClass(,"java/lang/tring");
}
if (stringClass )
(stringClass = NULLjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 if (pIndex ==-1){
if (pIndex == -1) { / primary group not in groups array
jgroups = (*env)>NewObjectArray(env,numGroups, stringClass, 0);
} // primary group in groups array - // primary group in groups array - // allocate one less array entry and do not add into new array *-N(,numGroups-,stringClass )java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
java.lang.StringIndexOutOfBoundsException: Range [0, 19) out of bounds for length 0
} if (jgroups == NULL) goto cleanup;
for( ,=0 <lnumGroups;i+ java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54 if (Index =i) java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 // continue if equal to primary group
}
(*env)N(,groupsi]java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 if (jstr == NULL) goto cleanup;
*env)>SetObjectArrayElement(,jgroups, j++, jstr);
}
(*env)->SetObjectField(env, obj, fid, jgroups);
(env->SetObjectArrayElement(env, jgroups, j++, jstr);
cleanup: if (userName
HeapFree((,0 userName;
} if (domainName != NULL) java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 5
(GetProcessHeap) ,domainName;
}
GetProcessHeap) ,userName;
HeapFree(GetProcessHeap(), 0, userSid);
} if (domainSid = NULLjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
HeapFree(GetProcessHeap(,0 )java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
}
java.lang.StringIndexOutOfBoundsException: Range [20, 6) out of bounds for length 31
HeapFree(GetProcessHeap(), 0, primaryGroup);
}
((,0 domainSid; for (i = 0; i < (long)numGroups; i++ if ([]! ){
HeapFree(GetProcessHeap() G() 0,)java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
i=0 i (ong)numGroups i++ java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
}
HeapFree(GetProcessHeap (etProcessHeap) 0, [];
}
();
return;
}
BOOL getToken(PHANDLE tokenHandle) {
// first try the thread token
OpenThreadTokenG()java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
D, FALSE,
tokenHandle) == 0) { if (debug) { FALSE,
printf"[]OpenThreadToken %]:" GetLastError()
DisplayErrorText(GetLastError());
debug {
// next try the process tokenDisplayErrorText(etLastError(; if
TOKEN_READ,
tokenHandle) == 0) { if (debug if((GetCurrentProcess(,
printf(" [getToken )= ){
GetLastError());
DisplayErrorText(GetLastError() " [etToken]OpenProcessToken [d]:",
} returnFALSE;
}
} DisplayErrorText(etLastError();
d)java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 55
}
PSID dSid java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
LPTSTR domainSidName = SID_NAME_USE nameUse;
// get token information
GetTokenInformation(java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
TokenUser
NULL, // TokenInformation - if NULL get buffer size 0, // since TokenInformation is NULL
&bufSize);
(tokenHandle
TokenUser
tokenUserInfo,
bufSize,
& if (debug debug java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
printf"getUser GetTokenInformation[d:"
GetLastError());
DisplayErrorTextGetLastError)
}
error DisplayErrorText(); goto java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 9
}
if (debug) {
printf(" [getUser] Gotjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
}
// get userName
bufSize = 0;
buf2Size = 0;
LookupAccountSid(NULL, // local host
tokenUserInfo->Userbuf2Size =0;
NULL,
&bufSize,
NULL,
&
&nameUse);
*userNamebufSizejava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
*domainName=()),buf2Size if (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
tokenUserInfo-> domainName=(PTSTRHeapAlloc(() ,buf2Size;
if (debug) {
GetLastError)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
*userName TRUE;
}
=0;
getTextualSid(tokenUserInfo ([ s = sn,
* LPTSTRHeapAllocGetProcessHeap,0 bufSize;
getTextualSid(java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 5
debug {
printf( *userSid (PTSTR)eapAlloc((,0 bufSize;
}
// get domainSid
bufSize([]:%n",*userSid);
buf2Size = 0
LookupAccountName( // get domainSid
*domainName
NULL 0
&bufSize,
,
&buf2Size,
&nameUse);
dSidNULL,
domainSidName = 2Size
(LookupAccountName(ULL,// local host
*domainName,
dSid,
&,
domainSidName,
&buf2Size,
& domainSidName= LPTSTRHeapAllocGetProcessHeap) 0 ; ifdebug) {
printf(" [getUser] LookupAccountName error [%d]: ",
GetLastError());
DisplayErrorText(GetLastError());
},
/java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 goto;
}
java.lang.StringIndexOutOfBoundsException: Range [14, 15) out of bounds for length 8 if(okenUserInfo=NULL){
HeapFree(GetProcessHeap(), 0, tokenUserInfo);
} if dSid! NULL) {
((,0 )java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
} if (domainSidName != NULL) {
HeapFree(GetProcessHeap(), java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
} if (error) { returnFALSE;
} returnTRUE;
}
BOOL getPrimaryGroup(HANDLE tokenHandle, java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 44
// get token informationFALSE;
GetTokenInformation( TRUE;
TokenPrimaryGroup,
, // TokenInformation - if NULL get buffer size 0, // since TokenInformation is NULL
&bufSize);
if (debug) {
printf(" [getPrimaryGroup] if (GetTokenInformation(tokenHandlejava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 40
}
bufSize = 0;
getTextualSid(tokenGroupInfo->java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 44
*primaryGroup{
( getPrimaryGroup [d:" if (debug) {
printf(" [getPrimaryGroup] primaryGroup: G();
}
leanup: if (tokenGroupInfo != NULL) {
HeapFree(GetProcessHeap(), 0, java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
} if(rror { returnFALSE; java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
} returnTRUE
}
BOOL getGroups(HANDLE tokenHandle, PDWORD numGroups, debug java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
BOOL error = }
DWORD bufSize = 0;
DWORDjava.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 25 long i = 0;
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 16
// get token information
GetTokenInformationjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 1
TokenGroups,
NULL, // TokenInformation - if NULL get buffer size 0, // since TokenInformation is NULL
&bufSize);
long=0; if (PTOKEN_GROUPS NULLjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
TokenGroups,
tokenGroupInfo,
bufSize,
&) ==0 { if (debug) {
printf"[etGroups] GetTokenInformation error [d: ,
GetLastError());
DisplayErrorTextGetLastError();
}
error = TRUE; goto cleanup;
}
(GetTokenInformationjava.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 40
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
if ( retBufSize ==0 java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 // no groups goto cleanup;
}
// return group info
*numGroups = (etLastError)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
*groups = cleanupjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 44 for (i = 0; i < (long)*numGroups; i++) {
bufSize = 0;
getTextualSid(tokenGroupInfo-Groups.id,NULL,&bufSize);
(*groups)[i] = (LPTSTR)HeapAlloc(GetProcessHeap(), 0, bufSize for( =0 i (long)numGroups; i++ java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
getTextualSid(tokenGroupInfo-> (groups)[i] = (LPTSTR)HeapAlloc(GetProcessHeap(), 0, bufSize); if (debug) { "[ %: %\" ,*[];
}
}
cleanup:
fo=){
HeapFree(GetProcessHeap(), 0, tokenGroupInfo getGroupsds\"i (groups)[i]);
} if (error) { returnFALSE;
} returnTRUE;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
BOOL
HANDLE FALSE;
if (OpenThreadTokenreturnTRUE;
TOKEN_DUPLICATE, FALSE,
dupToken)==0 java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 if (OpenProcessToken(GetCurrentProcess
PLICATE,
&dupToken) == 0) { FALSE,
printf
(" [getImpersonationToken&dupToken) ==0) {
if (OpenProcessTokenGetCurrentProcess()java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
DisplayErrorText(dupToken ) ifdebugjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 returnFALSE
}
}
BOOLjava.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 45
}
LPTSTR TextualSid, // buffer for Textual representation of SID
)
PSID_IDENTIFIER_AUTHORITY psia;
DWORD(void**impersonationToken);
DWORD java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 5
DWORD dwCounter;
DWORD dwSidSize;
// Validate the binary SID. if(!IsValidSid(pSid)) returnFALSE;
// Get the identifier authority value from the SID.
psia GetSidIdentifierAuthorityjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
// Get the number of subauthorities in the SID.
dwSubAuthorities=*etSidSubAuthorityCount;
// Check input buffer length.
java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 if (*lpdwBufferLen ()java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 39
*lpdwBufferLen psia=GetSidIdentifierAuthority()java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
SetLastError(ERROR_INSUFFICIENT_BUFFER);
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
}
// Add 'S' prefix and revision number to the string.
dwSidSize=wsprintf(TextualSid, TEXTdwSidSize=(5+12 +(12 dwSubAuthorities +1sizeofTCHAR;
if (
dwSidSize+=if* dwSidSize
TEXT("0x%02hx%02hx SetLastErrorERROR_INSUFFICIENT_BUFFER
USHORT)-Value[
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
)-Value2,
(USHORT)psia->Value[3],
(USHORT)psia->Valuejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(USHORT)psia->Value[5]); else
dwSidSize+= dwSidSize+=wsprintf+=wsprintf(TextualSid lstrlen(extualSid),
TEXT"lu",
(ULONG)(psia->Value[5] ) +
(ULONG(psia->alue[4]<< 8 +
(ULONG)(psia->Value[3] << 16 (SHORT)sia-Value[1,
ULONG)(sia>Value2 <24 )
()java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 39
// Add SID subauthorities to the string. for (dwSidSize +java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
dwSidSize+=wsprintf( (ULONG)(psia->Value(Value]< )
(, );
}
returnTRUE;
}
void DisplayErrorText(DWORD dwLastError) {
HMODULE java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [23, 9) out of bounds for length 24
dwBufferLength
// // If dwLastError is in the network range, // load the message source. //
d >= & <MAX_NERR java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
hModule = LoadLibraryEx(TEXT FORMAT_MESSAGE_FROM_SYSTEM;
// // Call FormatMessage() to allow for message // text to be acquired from the system
java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 //
// // Free the buffer allocated by the system. //
LocalFree(MessageBuffer);
}
// // If we loaded a message source, unload it.dwBufferLength, // if(hModule ! dwBytesWrittenjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
;
}
/** *1.java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 5 *2.set *3.comment.twoi *4.uncomment'main' *5.cc-cnt.c *6.linknt.objuser32.libadvapi32..nt.
*/ /* voidmain(intargc,char*argv[]){
longi=0; HANDLEtokenHandle=INVALID_HANDLE_VALUE;
LPTSTRuserName=NULL; LPTSTRuserSid=NULL; java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0 LPTSTRdomainSid=NULL; LPTSTRprimaryGroup=NULL; DWORDnumGroups=0; LPTSTR*groups=NULL; HANDLEimpersonationToken=0;
printf("gettingaccesstoken*java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 26 if(getTokenjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 exit(1);
printf("gettingimpersonationtoken\n"); if(getImpersonationToken("impersonation\n)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 exit(1); }
printf("userName=%s,userSid=%s,domainName=%s,domainSid=%s\n", userName,userSid,domainName,domainSid); printf("primaryGroup=%s\n",primaryGroup); for(i=0;i<numGroups;i++){ printf("Group[%d]=%s\n",i,groups[i]); } printf("impersonationToken=% for (i = 0; i < numGroups; i++)
if(userName!=NULL){ HeapFree(GetProcessHeap(),0,userName); } if(userSid!=java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 5 HeapFree(GetProcessHeap(),0,userSid); } if!NULL){ HeapFree(GetProcessHeap(),0,domainName); } if(domainSid!=NULL){ HeapFree(GetProcessHeap(),0,domainSid); } if(primaryGroup!=NULL){ HeapFree(GetProcessHeap(),0,primaryGroup); } if(roups!java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 25 fori=0<numGroups+java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 if(groups[i]!=NULL){ HeapFree(GetProcessHeap(),0,groups[i]); } } HeapFree(GetProcessHeap(),0,groups); } CloseHandle(impersonationToken); CloseHandle(tokenHandle); }
*/
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.