You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Prilikom čitanja "novih" kartica dolazilo je do sledeće greške (sama aplikacija je u GUI izbacivala null):
[Thread-1] ERROR net.devbase.jfreesteel.EidCard - Card error
java.nio.BufferUnderflowException
at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:151)
at java.nio.ByteBuffer.get(ByteBuffer.java:715)
at net.devbase.jfreesteel.EidCard.parseTlv(EidCard.java:143)
at net.devbase.jfreesteel.EidCard.readEidInfo(EidCard.java:297)
at net.devbase.jfreesteel.viewer.EidViewer.inserted(EidViewer.java:265)
at net.devbase.jfreesteel.Reader.notifyCardListener(Reader.java:210)
at net.devbase.jfreesteel.Reader.access$500(Reader.java:45)
at net.devbase.jfreesteel.Reader$1.notifyListeners(Reader.java:176)
at net.devbase.jfreesteel.Reader$1.run(Reader.java:156)
at java.lang.Thread.run(Thread.java:748)
Problem je u okviru klase EidCard (package net.devbase.jfreesteel) u izvršavanju metode public static Map<Integer, byte[]> parseTlv(final byte[] bytes). Prilikom čitanja "novih" kartice dolazilo je do toga da pokuša da pročita više podataka nego što u bufferu postoji.
Moram prizanti da ne poznajem strukturu iščitavanja, ali sam code pomenute metode malo promenio i iščitavanje je bilo uspešno i sa "novim" karticama.
Ovo je izgled promenjene metode:
publicstaticMap<Integer, byte[]> parseTlv(finalbyte[] bytes) {
HashMap<Integer, byte[]> out = newHashMap<Integer, byte[]>();
// [fld 16bit LE] [len 16bit LE] [len bytes of data] | [fld] [06] ...ByteBufferbuffer = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN);
// repeat as long as we have next tag and len...while (buffer.remaining() > 4) {
chartag = buffer.getChar();
charlength = buffer.getChar();
//pocetak izmenjenog dela u odnosu na originalni kodbyte[] range;
if (buffer.remaining()>(int)length){
range = newbyte[(int) length];
} else {
range = newbyte[buffer.remaining()];
}
//kraj izmenjenog dela u odnosu na originalni kodbuffer.get(range);
out.put((int) tag, range);
}
returnout;
}
Možda nije najsrećnije rešenje ali je odradilo posao :)
Inače, u jednom trenutku prilikom čitanja u length se upisuje vrednost veća od 1000, a ukupna veličina bafera je reda 250 (u tom trenutku je preostalo negde oko 130 byte-ova za čitanje).
Napomena: Ovo sam probao sa jednom "starom" ličnom karticom i dve "nove".
Nisam neki guru u programiranju, poznajem osnove, te smatram da ćeš možda dati neko drugo rešenje, a nadam se da će uskoro nova verzija (*.deb bar) sa sređenim bug-om.
Svako dobro!!!
The text was updated successfully, but these errors were encountered:
Možeš li mi se javiti mejlom na [email protected] kako bih pribavio "data dump" sa te problematične (tih problematičnih?) kartica?
Polje length čita dva bajta tako da vrednost 1000 jeste moguća, međutim ako je tek 130b preostalo za parsiranje to bi značilo da ili nemamo tačan ceo sadržaj pročitan sa kartice (možda imamo neke bajtove viška?) ili da je parsiranje već omanulo negde ranije pa sadržaj taga čitamo kao novi tag.
Prilikom čitanja "novih" kartica dolazilo je do sledeće greške (sama aplikacija je u GUI izbacivala null):
Problem je u okviru klase
EidCard
(package net.devbase.jfreesteel
) u izvršavanju metodepublic static Map<Integer, byte[]> parseTlv(final byte[] bytes)
. Prilikom čitanja "novih" kartice dolazilo je do toga da pokuša da pročita više podataka nego što u bufferu postoji.Moram prizanti da ne poznajem strukturu iščitavanja, ali sam code pomenute metode malo promenio i iščitavanje je bilo uspešno i sa "novim" karticama.
Ovo je izgled promenjene metode:
Možda nije najsrećnije rešenje ali je odradilo posao :)
Inače, u jednom trenutku prilikom čitanja u
length
se upisuje vrednost veća od 1000, a ukupna veličina bafera je reda 250 (u tom trenutku je preostalo negde oko 130 byte-ova za čitanje).Napomena: Ovo sam probao sa jednom "starom" ličnom karticom i dve "nove".
Nisam neki guru u programiranju, poznajem osnove, te smatram da ćeš možda dati neko drugo rešenje, a nadam se da će uskoro nova verzija (
*.deb
bar) sa sređenim bug-om.Svako dobro!!!
The text was updated successfully, but these errors were encountered: